系统升级程序的介绍

          开发系统时,很多时候都要开发系统升级程序。升级程序的方式大多相同。目前我开发一个升级程序是这样的。启动主程序的同时启动升级程序,通过升级程序获取服务器上版本配置文件,判断当前的系统版本是否最新的版本。若是最新版本,则升级程序关闭。否则弹出提示有新版本需要下载,然后远程服务器上下载新版本,下载后提示关闭正在运行的主程序,使用新版本覆盖旧版本程序,并将配置文件中的版本号更新为最新程序的版本号。

         下面贴出我开发的升级程序的部分代码:

        /// <summary>
        /// 检查是否有更新
        /// </summary>
        public void checkUpdate()
        {
            string updateUrl = "http://172.16.10.199:8040/DownloadWinecooler/update.xml";//升级配置的XML文件地址  
            if (ConfigurationManager.AppSettings["updateUrl"] != null)
            {
                updateUrl = ConfigurationManager.AppSettings["updateUrl"].ToString();
            }
            TextLog.AppendText(updateUrl);
            TextLog.AppendText("\r\n");
            //将信息写入到日志输出文件
            string strOuput = string.Format("Url:{0}!\n", updateUrl);
            SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);

            SoftUpdate app = new SoftUpdate(Application.ExecutablePath, "Update", updateUrl);
            app.UpdateFinish += new UpdateState(app_UpdateFinish);
            try
            {
                //if (app.IsUpdate && MessageBox.Show("检查到新版本,是否更新?", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                if (app.IsUpdate)
                {
                    strOuput = string.Format("有新版本,正在下载中...\n");
                    TextLog.AppendText(strOuput);
                    //将信息写入到日志输出文件
                    SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);

                    Thread update = new Thread(new ThreadStart(app.Update));
                    update.Start();
                }
                else
                {
                    strOuput = string.Format("已经是最新版本了\n");
                    TextLog.AppendText(strOuput);
                    //将信息写入到日志输出文件
                    SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
                    RestartPC();
                }
            }
            catch (Exception ex)
            {
                ex.ToString();
                //MessageBox.Show(ex.Message);
                strOuput = string.Format("下载出错啦!\n");
                TextLog.AppendText(strOuput);

                //将信息写入到日志输出文件
                SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
                RestartPC();
            }

        }

  

       /// <summary>
        /// 更新完成
        /// </summary>
        /// <param name="strPathName"></param>
        void app_UpdateFinish(string strPathName)
        {
            filename = strPathName;
            string strOuput = string.Format("更新完成!\n");
            TextLog.AppendText(strOuput);
            //将信息写入到日志输出文件

            SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
             
            //然后更新新程序
            PostMessage(this.Handle, MYMESSAGE_UPDATE, "", "");   //发用户自定义消息
        }


       /// <summary>
        /// 重写窗体的消息处理函数DefWndProc,从中加入自己定义消息 MYMESSAGE_UPDATE 的检测的处理入口
        /// </summary>
        /// <param name="m"></param>
        protected override void DefWndProc(ref Message m)
        {
            switch (m.Msg)
            {
                //接收自定义消息MYMESSAGE,并显示其参数
                case MYMESSAGE_UPDATE:
                    {
                        //KillProcess("calc.exe");//计算器的例子
                        string strOuput = string.Format("准备用新版本的的程序覆盖旧程序,关闭当前酒柜系统\n");
                        //将信息写入到日志输出文件
                        SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
                        KillProcess("SysMain");//
                        strOuput = string.Format("启动刚才下载的安装包覆盖旧版本程序,当前新版本为:{0}\n",SoftUpdate.newVerson);
                        ConfigManager.UpdateOrCreateAppSetting("Main.exe.config", "Version", SoftUpdate.newVerson);
                        //将信息写入到日志输出文件
                        SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
                        ShellExecute(0, "open", filename, "", "", ShowCommands.SW_SHOWNORMAL);
                        Thread.Sleep(1000);
                        //输出的调试字符串
                        strOuput = string.Format("更新酒柜客户端系统完成,准备重新启动电脑\n");
                        //将信息写入到日志输出文件
                        SoftUpdate.TP_WriteAppLogFile(SoftUpdate.g_AppLogFileName, strOuput);
                        RestartPC();
                    }
                    break;
                default:
                    base.DefWndProc(ref m);
                    break;
            }
        }





转载于:https://www.cnblogs.com/kevinGao/archive/2011/11/03/2236176.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
版本08.11.03,有详细的帮助文档,完全免费。整个程序才80多K,但功能却不少,非常适合免费软件和共享软件作者。有以下功能: 1. 版本号比较(考虑到可能会有数据方面的升级,因此版本号不从程序自身中取,而是根据需要在配置时设定),同一个软件中允许有多个不同版本的程序或数据。 2. 根据版本号比较结果,从服务器中下载相应程序或数据进行升级,然后使用本地与服务器版本号一致。版本号可以分级,用“.”隔开,级数不限,如10或10.01或100.001.002等等。 3. 可以指定单个文件的存放目录,指定的目录若不存在时将会自动生成。 4. 升级时,如果相关的程序在运行,会自动地将其关闭,以保证升级的顺利进行。 5. 升级文件可以事先压缩好,放到服务器上,下载到本地后再自动进行解压。目前只支持ZIP格式。 6. 可以指定升级完成后自动启动一应用程序,有两种启动模式(常规与强制),同时还可以根据具体情况决定是否需要执行此应用程序。 7. 可以自定义标题栏图标(可以为动画),窗口右侧的图像。 8. 可以自定义自己的提示语(升级启动前后的提示语)。 9. 提供了常规显示、静默显示、无显示三种进度显示方式。 10. 可以指定升级后是否修改相关项的版本号。若设置为不修改,则可以使应用程序每次启动时都能从网络获取相关内容。 11. 应用程序可以通过消息方式获取自动升级完成后的结果。 12. 从版本V08.11.01开始,本软件可以进行自我更新。以后你只要下载最新的版本,放在你的服务器指定位置即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值