分享
 
 
 

用C#实现在线升级

王朝c#·作者佚名  2006-11-25
窄屏简体版  字體: |||超大  

//这是一个webservice

private AppUpdate.UpdateServ UpdateSvr;

private void button1_Click(object sender, System.EventArgs e)

{

if(LinkWebServices()==true)

{

this.label1.Text="连接服务器....... PASS";

if(CheckVer()==true)

{

this.label2.Text="检查最新版本并下载.......PASS";

}

else

{

this.label2.Text="检查最新版本并下载.......FAIL";

}

}

else

{

this.label1.Text="连接服务器.......FAIL";

}

}

//这是用来与升级服务器建立连接

private bool LinkWebServices()

{

try

{

UpdateSvr=new UpdateServ();

return true;

}

catch

{

return false;

}

}

//调用webservice用来检查是不是有最新的版本

private bool CheckVer()

{

string path =Application.StartupPath;

try

{

VersionCheck(path);

return true;

}

catch(Exception ex)

{

MessageBox.Show(ex.ToString());

return false;

}

}

private void VersionCheck(string desPath)

{

try

{

#region 查看文件和目录

if(!desPath.EndsWith(@"\"))

desPath += @"\";

if(!System.IO.Directory.Exists(desPath))

{

System.IO.Directory.CreateDirectory(desPath);

}

string tempPath = desPath + @"tempDesPathCache\";

if(System.IO.Directory.Exists(tempPath))

{

System.IO.Directory.Delete(tempPath,true);

System.IO.Directory.CreateDirectory(tempPath);

}

else

System.IO.Directory.CreateDirectory(tempPath);

if(!System.IO.File.Exists(desPath + "UpdateConfig.xml"))

{

System.Xml.XmlDocument updateConfig = new System.Xml.XmlDocument();

updateConfig.LoadXml(@"<root></root>");

updateConfig.Save(desPath + "UpdateConfig.xml");

}

#endregion

System.Xml.XmlDocument serverXmlDoc = UpdateSvr.AppUpdateVertion();

System.Xml.XmlDocument localXmlDoc = new System.Xml.XmlDocument();

localXmlDoc.Load(desPath + "UpdateConfig.xml");

bool newVersionExist = false;

bool moduleExist = false;

System.Xml.XmlNode serverNode0 = serverXmlDoc.ChildNodes[0];

System.Xml.XmlNode localNode0 = localXmlDoc.ChildNodes[0];

foreach(System.Xml.XmlNode serverNode in serverNode0)

{

moduleExist = false;

foreach(System.Xml.XmlNode localNode in localNode0)

{

//找到对应模块

if(localNode.ChildNodes[0].InnerText == serverNode.ChildNodes[0].InnerText)

{

moduleExist = true;

//版本号判断

if(localNode.ChildNodes[1].InnerText.CompareTo(serverNode.ChildNodes[1].InnerText) < 0)

{

newVersionExist = true;

if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet")

{

DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);

}

else

{

DownloadFile(serverNode.ChildNodes[3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);

}

}

break;

}

}

//没找到对应模块

if(false == moduleExist)

{

if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet")

{

DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);

}

else

{

DownloadFile(serverNode.ChildNodes[3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);

}

}

}

//写入新UpdateConfig.xml升级完毕后替换

if(newVersionExist)

{

serverXmlDoc.Save(tempPath + "UpdateConfig.xml");

if(DialogResult.Yes == MessageBox.Show("有新版本,是否更新?","提示",MessageBoxButtons.YesNo))

{

string[] dirs = System.IO.Directory.GetFiles(tempPath, "*.*");

string fileName;

foreach (string dir in dirs)

{

fileName = ((dir.Split(Convert.ToChar(@"\")))[dir.Split(Convert.ToChar(@"\")).Length - 1]);

if(System.IO.File.Exists(desPath + fileName))

{

//TODO:可以支持备份以前版本

System.IO.File.Delete(desPath + fileName);

}

//TODO:如果系统正在运行,您得停止系统,至于如何停止,也许可以使用System.Diagnostics.Process

System.IO.File.Move(dir,desPath + fileName);

}

MessageBox.Show("升级完毕");

}

else

{

//TODO:可以支持重新提示升级

}

}

}

catch(Exception ex)

{

throw new Exception("升级失败,原因是:" + ex.Message,ex);

}

}

//下载最新的文件

private void DownloadFile(string source,string fileName)

{

try

{

System.Net.WebClient myWebClient = new System.Net.WebClient();

myWebClient.DownloadFile(source,fileName);

}

catch(Exception ex)

{

throw new Exception("下载失败,原因是:" + ex.Message,ex);

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有