• C/S WinForm自动升级


    这二天刚好完成一个C/S 自动升级的功能 代码分享一下

    /// <summary>
        /// 版本检测
        /// </summary>
        public class VersionCheckNEW
        {
            private const string Arg_CheckVersion = "CheckVersion";// 主程序调用升级程序检查是否有版本更新
            private const string Arg_MainEXECall = "MainEXECall";// 主程序调用升级程序   
            private const string UpgraderINIFile = "UpgraderClient.ini";//本地升级配置文件
            private const string UpgraderServerINIFile = "UpgraderServer.ini";//服务端配置文件

            /// <summary>
            /// 自动升级
            /// </summary>
            public static void AutoUpgrader(ref bool exitApp)
            {
                string file = Application.StartupPath + @"" + Globals.DEF_UPGRADER_NAME;
                if (!File.Exists(file)) return;//本地没有升级程序文件,不进行自动升级

                frmWaiting.ShowMe(null, "正在检查升级程序的版本...");

                //检查并下载最新的版本升级程序            
                VersionCheckNEW.CheckUpgraderByDownloader();

                frmWaiting.ShowMe(null, "正在检查系统更新,请稍候...");

                //检查系统版本            
                VersionCheckNEW.CheckVersion(ref exitApp);
            }

            /// <summary>
            /// 取本地升级程序的版本号
            /// </summary>
            /// <returns></returns>
            public static string GetUpgraderVersion()
            {
                IniFile ini = new IniFile(Application.StartupPath + @"" + UpgraderINIFile);
                string clientVer = ini.IniReadValue("Client", "UpgraderFileVersion");
                return clientVer;
            }

            /// <summary>
            /// 保存升级程序版本号
            /// </summary>
            /// <param name="version">版本号</param>
            public static void SaveUpgraderVersion(string version)
            {
                IniFile ini = new IniFile(Application.StartupPath + @"" + UpgraderINIFile);
                ini.IniWriteValue("Client", "UpgraderFileVersion", version);
            }

            /// <summary>
            /// 检查版本升级程序,有新版本自动下载
            /// </summary>
            public static bool CheckUpgraderByDownloader()
            {
                string upgraderPath = Application.StartupPath + @"" + Globals.DEF_UPGRADER_NAME;
                string serverVer = "";

                try
                {
                    byte[] fileData = File.ReadAllBytes(upgraderPath);
                    Assembly upgrader = Assembly.Load(fileData);

                    Type t = upgrader.GetType("A8ERP.UpgraderClient.Library.UpgraderController");
                    object o = t.Assembly.CreateInstance(t.FullName);
                    MethodInfo M = t.GetMethod("DownloadUpgrader");

                    //调用DownloadUpgrader方法
                    //参数名:destPath,传值:upgraderPath==Application.StartupPath                                
                    object r = M.Invoke(o, new object[] { upgraderPath });

                    serverVer = r.ToString();
                    if (serverVer != "")//有新版本
                    {
                        IniFile ini = new IniFile(Application.StartupPath + @"" + UpgraderINIFile);
                        ini.IniWriteValue("Setup", "UpgraderFileVersion", serverVer.ToString());//写入版本号                                        
                    }
                }
                catch (Exception ex)
                {
                    //LogUserOperate.Write(ex);
                    //Msg.Warning("检查升级程序失败! " + ex.Message);
                }

                return serverVer != "";
            }

            /// <summary>
            /// 检查更新,有更新要退出主程序
            /// </summary>
            /// <param name="AppExit">退出应用程序</param>
            public static void CheckVersion(ref bool AppExit)
            {
                AppExit = false;
                try
                {
                    string checkResultFile = Application.StartupPath + "\" + Guid.NewGuid().ToString().Replace("-", "") + ".ver"; //存储版本号的临时文件            
                    string upgrader = Application.StartupPath + "\" + Globals.DEF_UPGRADER_NAME;//升级程序文件名

                    File.WriteAllText(checkResultFile, ""); //创建空文件

                    checkResultFile = ShellPathNameConvertNEW.ToShortPathName(checkResultFile); //转换为DOS短文件名

                    Process pro = new Process();
                    pro.StartInfo = new ProcessStartInfo(upgrader, Arg_CheckVersion + " " + checkResultFile);//获取升级包的文件数
                    pro.StartInfo.UseShellExecute = false;
                    pro.Start();
                    pro.WaitForExit(3000);//等待升级程序关联程序退出

                    frmWaiting.HideMe(null);

                    //如果生成临时文件,返回可更新的文件数。
                    if (File.Exists(checkResultFile))
                    {
                        //读取临时文件内容
                        string result = File.ReadAllText(checkResultFile);
                        File.Delete(checkResultFile); //删除临时文件

                        if ((result != "") && (int.Parse(result) > 0))//有新版本,升级包的文件数>0
                        {
                            AppExit = true;
                            Process.Start(upgrader, Arg_MainEXECall); //启动自动升级程序
                        }
                    }
                }
                catch (Exception ex)
                {
                    //LogUserOperate.Write(ex);
                    //Msg.ShowError("CheckVersion:" + ex.Message);
                }
            }

        }

  • 相关阅读:
    ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
    查看windows和linux下端口是否被占用
    linux系统的默认用户
    修改mysql、oracle、sqlserver默认端口
    linux(centos)下密码有效期和密码复杂度设置
    linux下设置账户锁定阈值:登录失败n次,多长时间后解锁重新登录
    linux账户的锁定和解锁、禁用账号
    执行./install.sh时报错-bash: ./install.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录
    突然虚拟机无法联网解决办法,且报错Failed to start LSB: Bring up/down
    kubernetes集群环境搭建(7)
  • 原文地址:https://www.cnblogs.com/kuangood/p/5748051.html
Copyright © 2020-2023  润新知