加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何实现winform客户端智能更新

发布时间:2020-12-17 02:57:52 所属栏目:安全 来源:网络整理
导读:1、在服务器上建立虚拟目录appUpdate 2、设置升级配置文件UpdateConfig.xml内容,放到虚拟目录appUpdate下: 格式:moduleName为动态链接库名称,vertion为当前版本号,appUrl为提供下载的地址 例子: root module moduleNameModule1.dll/moduleName vertion
1、在服务器上建立虚拟目录appUpdate 2、设置升级配置文件UpdateConfig.xml内容,放到虚拟目录appUpdate下: 格式:moduleName为动态链接库名称,vertion为当前版本号,appUrl为提供下载的地址 例子: <root> <module> <moduleName>Module1.dll</moduleName> <vertion>1.0.0.1</vertion> <appUrl>http://localhost/appUpdate/Module1.dll</appUrl> </module> <module> <moduleName>Module2.dll</moduleName> <vertion>1.0.0.1</vertion> <appUrl>http://localhost/appUpdate/Module2.dll</appUrl> </module> <module> <moduleName>ZiModule2ReportPrint.dll</moduleName> <vertion>1.0.0.1</vertion> <appUrl>http://localhost/appUpdate/ZiModule2ReportPrint.dll</appUrl> </module> </root> 3、WebService,部署到appUpdate虚拟目录下: [WebMethodAttribute] public System.Xml.XmlDocument AppUpdateVertion() { System.Xml.XmlDocument xml = new System.Xml.XmlDocument(); xml.Load(CurrentPath("/appUpdate") + @"/UpdateConfig.xml"); return xml; } private string CurrentPath(string virtualPath) { return HttpContext.Current.Server.MapPath(virtualPath); } 3、升级版本判断 /// <summary> ///从webServiceAddress中下载新版本 /// </summary> /// <param name="desPath">新版本的存放目录</param> /// <param name="webServiceAddress">webService的网址</param> private void VersionCheck(string desPath,string webServiceAddress) { 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 AppUpdate.AppUpdate appUpdate = new Test.AppUpdate.AppUpdate(); appUpdate.Url = webServiceAddress; System.Xml.XmlDocument serverXmlDoc = appUpdate.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; DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText); } break; } } //没找到对应模块 if(false == moduleExist) { DownloadFile(serverNode.ChildNodes[2].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); } } 4、下载文件: 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); } } 5、客户端调用: string path =Application.StartupPath; VersionCheck(path,"http://localhost/AppUpdate/AppUpdate.asmx")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读