可靠地重新启动单实例WPF应用程序

时间:2011-10-19 21:57:45

标签: wpf restart

我想让我当前的应用程序关闭并重新启动。我已经看过很多这方面的帖子,但这些似乎都不适合我。

我试过了

 System.Diagnostics.Process.Start(System.Windows.Application.ResourceAssembly.Location);
 System.Windows.Application.Current.Shutdown();

然而,这只会重启应用程序一次。如果我再次按下“重新启动”按钮(在已经重新启动的应用程序上),它只会关闭。

我还尝试启动一个新的System.Diagnostics.Process并关闭当前进程,但是这不再重启,只是关闭。

如何重新启动当前的WPF应用程序?

1 个答案:

答案 0 :(得分:2)

您可以创建另一个应用程序,在退出应用程序时启动该应用程序,然后再次启动应用程序。有点像修补程序如何工作,只是没有修补任何东西。从好的方面来说,你可以在“restart-application”中创建一个循环,它会检查主应用程序进程的所有正在运行的进程,并且只有在它不再出现在进程中时才尝试重新启动它 - 并且你得到了修补程序的骨头也是:)虽然由于它仍然在进程列表中而你似乎没有重启应用程序的问题 - 这是我在生产环境中这样做的方式因为这给你最多控制恕我直言。

修改

主应用程序的按钮事件处理程序(或您想要重新启动应用程序的位置)中的那一部分(在我的情况下 Process2BRestarted.exe ):

    private void cmdRestart_Click(object sender, EventArgs e)
    {
        var info = new ProcessStartInfo();

        info.FileName = "ProcessReStarter";
        info.WindowStyle = ProcessWindowStyle.Hidden;
        Process.Start(info);

        Application.Exit();
    }

这应该进入你的实用程序/重启器应用程序( ProcessReStarter.exe 这里):

    private void MainForm_Load(object sender, EventArgs e)
    {
        // wait for main application process to end
        // really should implement some kind of error-checking/timer here also
        while (Process.GetProcessesByName("Process2BRestarted").Count() > 0) { }
        // ok, process should not be running any longer, restart it
        Process.Start("Process2BRestarted");
        // and exit the utility app
        Application.Exit();
    }

单击重新启动按钮现在将创建一个新进程 ProcessReStarter.exe ,它将遍历所有正在运行的进程的进程列表 - 检查Process2BRestarted是否仍在运行。如果该进程未出现在列表中(不再有),它现在将启动一个新的 Process2BRestarted.exe 进程并退出。