C#单exe程序在线升级更新

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangjingkaibear/article/details/81867994

有一个小工具,除了配置文件就只有一个exe主程序,以前弄别的工具有引用一些dll,还做了更新器,这个小工具不想弄太复杂,希望保持单exe又具有在线升级的功能,网上看到有人问过同样问题,写下我的方法以作参考。

版本检查是通过一个在线的txt获取的,获取到版本号和本程序版本号对比(版本号用的是2018.08.20这样的格式,去掉.对比数字大小就可以了),如果有更新则下载指定地址的exe文件。

下载的文件保存为AppName.new

如果下载的文件没问题,则将原来的主程序AppName.exe执行一个File.Move操作,改名为AppName.old(程序在运行exe无法Delete,但是Move却是允许的)

然后再把AppName.new也做一个File.Move,改名为AppName.exe

然后提示重启以应用新版本,如下面代码,对话框选择Yes则执行一个方法以及退出程序。

 DialogResult dlgresult = MessageBox.Show(this, string.Format("已经更新到{0},是否重启以应用新版本?", NewVersion), "提示", MessageBoxButtons.YesNo);
  if (dlgresult == DialogResult.Yes)
     {
         DelayRun("AppName.exe", 5);
         System.Windows.Forms.Application.Exit();
     }

DelayRun方法用于重启应用,如果不需要重启功能则可以不需要这部分代码,用户下次使用时运行AppName.exe就是新版本了。

    public static void DelayRun(string path, int time) //延迟运行
        {
            ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/C ping 127.0.0.1 -n " + time + " -w 1000 > Nul & " + path);
            psi.WindowStyle = ProcessWindowStyle.Hidden;
            psi.CreateNoWindow = true;
            Process.Start(psi);
            System.Windows.Forms.Application.Exit();
        }

 最后在Form_Load方法加上一个判断,如果存在AppName.old文件则File.Delete删除旧版本文件即可。

猜你喜欢

转载自blog.csdn.net/wangjingkaibear/article/details/81867994