winform程序实现自动升级

本文代码参考http://www.cnblogs.com/iyond/archive/2007/06/14/783301.html而来,只是在原有基础上做了整合,想深入理解请看原本,我只是从实现过程简单总结。
解决方案总共有3个项目:AppUpdateDemo是测试项目;AppUpdateC是自动升级的组件,这个项目编译将生成一个AppUpdateC.dll程序集,以后在要进行自动升级的项目中引用这个程序集,然后在要进行升级的项目的program.cs中实例化:
 AppUpdateC.AppUpdater au = new AppUpdaterC.AppUpdater();
 try
            {
                au.Update();
            }
            catch (WebException exp)
            {
                MessageBox.Show(String.Format("无法找到指定资源"n"n{0}", exp.Message), "自动升级", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (XmlException exp)
            {
                MessageBox.Show(String.Format("下载的升级文件有错误"n"n{0}", exp.Message), "自动升级", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (NotSupportedException exp)
            {
                MessageBox.Show(String.Format("升级地址配置错误"n"n{0}", exp.Message), "自动升级", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (ArgumentException exp)
            {
                MessageBox.Show(String.Format("下载的升级文件有错误"n"n{0}", exp.Message), "自动升级", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception exp)
            {
                MessageBox.Show(String.Format("升级过程中发生错误"n"n{0}", exp.Message), "自动升级", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            Application.Run(new frmMain());
最后一个项目叫WriteConfig是为自动升级程序生成客户端和服务器端配置的工具,编译生成一个WriteConfig.exe的工具,把该工具放在服务器端运行将生成服务器端的升级配置文件Server.xml,放在客户端生成客户端client.config文件(客户端只有第一次运行才需要client.config),该工具生成客户端文件形式如:
<Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ServerUrl>http://localhost/appUpdateServer/Server.xml</ServerUrl>
  <UpdateFileList>
    <LocalFile path="AppUpdateDemo.exe" lastver="1.0.0.0" />
    <LocalFile path="Server.xml" lastver="1.0.0.0" />
    <LocalFile path="Client.config.old" lastver="1.0.0.0" />
    <LocalFile path="Client.config" lastver="1.0.0.0" />
    <LocalFile path="WriteConfig.exe" lastver="1.0.0.0" />
    <LocalFile path="AppUpdateDemo.vshost.exe.manifest" lastver="1.0.0.0" />
    <LocalFile path="AppUpdateDemo.pdb" lastver="1.0.0.0" />
    <LocalFile path="AppUpdaterC.pdb" lastver="1.0.0.0" />
    <LocalFile path="AppUpdateDemo.vshost.exe.old" lastver="1.0.0.0" />
    <LocalFile path="AppUpdateDemo.vshost.exe" lastver="1.0.0.0" />
  </UpdateFileList>
</Config>
主要把当前版本的客户端文件列表列出来,里面有个节点<ServerUrl>指服务器端升级配置文件,形式如下:
<?xml version="1.0" encoding="us-ascii"?>
<updateFiles>
  <file path="WriteConfig.exe" url="http://localhost/appUpdateServer/WriteConfig.exe" size="12800" lastver="2.0.0.0" />
  <file path="AppUpdateDemo.vshost.exe.manifest" url="http://localhost/appUpdateServer/AppUpdateDemo.vshost.exe.manifest" size="490" lastver="2.0.0.0" />
  <file path="AppUpdateDemo.pdb" url="http://localhost/appUpdateServer/AppUpdateDemo.pdb" size="28160" lastver="2.0.0.0" />
  <file path="AppUpdaterC.pdb" url="http://localhost/appUpdateServer/AppUpdaterC.pdb" size="44544" lastver="2.0.0.0" />
</updateFiles>
每次主程序运行时将把服务器配置里的lastver和当前配置里的lastver比较,发现有高版本将提示升级,就AppUpdateDemo测试流程如下:
1、改改项目窗体里的内容,把label的text属性改为这是“最初的版本”。编译该项目,把该项目bug下的文件拷出来放到一个新建的client文件夹中,此时AppUpdateDemo是不能运行的,少了client.config文件,所以把第三个项目生成的WriteConfig.exe也拷到client文件夹中,运行生成client.config文件。
2、改改项目窗体里的内容,把label的text属性改为“这是升级后的版本”,编译该项目,把bug下的文件拷到一个新建的appUpdateServer文件夹中,运行WriteConfig.exe为该文件夹中的文件生成客户端和服务器端配置文件。

3、把appUpdateServer文件夹设成站点,客户端从这里更新新版本,把该站点的权限设置成.exe可下载和.config可下载。

https://files.cnblogs.com/medal/LastVertion.rar 

原文地址:https://www.cnblogs.com/medal/p/1273348.html