zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    python调c++之caffe实现
    coco数据处理与分割
    一个队列类的实现(比delphi自带的速度快70倍) 转
    临界区对象TCriticalSection(Delphi) 与 TRtlCriticalSection 的区别(转)
    缇、像素转厘米的方法
    缇 磅 像素
    delphi RTTI 反射技术(转自朝闻道博客)
    emrDB本机异地泵导双备份并自动压缩 新.bat
    ORA-01589错误 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
    Oracle ORA-01033: 错误解决办法
  • 原文地址:https://www.cnblogs.com/medal/p/1273348.html
Copyright © 2011-2022 走看看