//这是一个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); } }
C#制作在线升级程序
时间: 2024-10-19 22:32:57