• 系统升级程序的介绍


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

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

            /// <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;
                }
            }





  • 相关阅读:
    [985] 令牌放置
    [191] 位1的个数
    [637] 二叉树的层平均值
    大数据量时 Mysql LIMIT如何正确对其进行优化(转载)
    数据库中,表一sum得出一个值,赋给表二的某个字段,为null
    安装JDK提示: 该项不适于在指定状态下使用的错误
    hibernate中多对一问题
    JSONObject基本内容(三)
    JSONObject基本内容(二)
    JSONObject基本内容(一)
  • 原文地址:https://www.cnblogs.com/kevinGao/p/2236176.html
Copyright © 2020-2023  润新知