开发C#.NET 2.0 WinForm应用程序.需要应用程序关闭并重新启动自身.
Application.Restart();
上述方法有proven to be unreliable个参数.
重启应用程序的更好方法是什么?
开发C#.NET 2.0 WinForm应用程序.需要应用程序关闭并重新启动自身.
Application.Restart();
上述方法有proven to be unreliable个参数.
重启应用程序的更好方法是什么?
不幸的是,您不能使用流程.Start()启动当前正在运行的进程的实例.根据流程.开始()文档:
这项技术在VS调试器下可以很好地工作(因为VS会使用某种魔术,使Process.Start认为进程尚未运行),但如果不在调试器下运行,则会失败.(请注意,这可能是特定于操作系统的-我似乎记得在我的一些测试中,它可以在XP或Vista上运行,但我可能只记得在调试器下运行它.)
这项技术正是我目前工作的项目中最后一位程序员所使用的技术,我一直在努力寻找解决方法.到目前为止,我只找到了一个解决方案,对我来说,这感觉既脏又笨拙:启动第二个应用程序,在后台等待第一个应用程序终止,然后重新启动第一个应用程序.我相信这会管用,但是,真恶心.
编辑:使用第二个应用程序可以工作.我在第二个应用中所做的就是:
static void RestartApp(int pid, string applicationName )
{
// Wait for the process to terminate
Process process = null;
try
{
process = Process.GetProcessById(pid);
process.WaitForExit(1000);
}
catch (ArgumentException ex)
{
// ArgumentException to indicate that the
// process doesn't exist? LAME!!
}
Process.Start(applicationName, "");
}
(这是一个非常简单的例子.真正的代码有很多健全性判断、错误处理等.)