zoukankan      html  css  js  c++  java
  • 系统升级程序的介绍

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

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

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





  • 相关阅读:
    sparql学习sparql示例、dbpedia在线验证
    中国绿卡
    逾期率的水有多深,你知道吗?
    ICO和区块链区别
    What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?
    Link static data in sql source control
    sql data compare
    viewbag
    多态的实际使用
    win10 sedlauncher.exe占用cpu处理
  • 原文地址:https://www.cnblogs.com/kevinGao/p/2236176.html
Copyright © 2011-2022 走看看