程序自我重启 --- 实用方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序自我重启 --- 实用方法相关的知识,希望对你有一定的参考价值。

1.问题或需求描述:
程序自我重启,或在局域网环境下更新重启。

2.解决方法或原理:
可创建前台或后台 cmd进程,实现程序更新重启。

C#代码:

...
using System.Diagnostics;
using System.IO;
...

private void Restart()
{
        //获得当前程序信息
        Process cur = Process.GetCurrentProcess();
        FileInfo fi = new FileInfo(cur.MainModule.FileName);

        try
        {
            Process subPro = new Process();
            subPro.StartInfo.UseShellExecute = true;
            subPro.StartInfo.FileName = "cmd";
            subPro.StartInfo.Arguments = " /q /c echo 请勿中断,正在重启程序... & ping -n 3 127.1 1>nul 2>nul & taskkill /pid "
                + cur.Id + " 1>nul 2>nul & start \"\" /max \"" 
                + cur.MainModule.FileName + "\"";
            subPro.StartInfo.CreateNoWindow = false;
            subPro.Start();
        }
        catch
        {
                //Add your code
        }
        finally
        {
            Close();
        }
}

private void Update()
{
    try
    {
        //网络程序位置定义
        const string sNetExePath = @"\\192.168.158.25\setup\Test\test.exe";

        //获得当前程序信息
        Process cur = Process.GetCurrentProcess();
        FileInfo fi = new FileInfo(cur.MainModule.FileName);

        //获得网络位置程序信息
        FileInfo fi2 = new FileInfo(sNetExePath);

        //比较文件修改时间戳,如果网络文件较新则更新本地程序并重启
        if (DateTime.Compare(fi2.LastWriteTime, fi.LastWriteTime) > 0)
        {
            try
            {
                Process subPro = new Process();
                subPro.StartInfo.UseShellExecute = true;
                subPro.StartInfo.FileName = "cmd";
                subPro.StartInfo.Arguments = " /q /c echo 请勿中断,正在更新程序... & ping -n 3 127.1 1>nul 2>nul & taskkill /pid " 
                    + cur.Id + " 1>nul 2>nul & copy /y \"" 
                    + sNetExePath + "\" \"" 
                    + cur.MainModule.FileName 
                    + "\" 1>nul 2>nul && start \"\" /max \"" 
                    + cur.MainModule.FileName + "\"";
                subPro.StartInfo.CreateNoWindow = false;
                subPro.Start();
            }
            catch
            {

            }
            finally
            {
                Close();
            }
        }
    }
    catch
    {

    }
}

以上是关于程序自我重启 --- 实用方法的主要内容,如果未能解决你的问题,请参考以下文章

C#程序员经常用到的10个实用代码片段 - 操作系统

译文:18个实用的JavaScript代码片段,助你快速处理日常编程任务

分享几个实用的代码片段(附代码例子)

分享几个实用的代码片段(附代码例子)

BootStrap实用代码片段(持续总结)

回归 | js实用代码片段的封装与总结(持续更新中...)