1.问题或需求描述:
程序自我重启,或在局域网环境下更新重启。网络
2.解决方法或原理:
可建立前台或后台 cmd进程,实现程序更新重启。ide
C#代码:code
... 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 { } }