Надежно перезапустите приложение WPF для одного экземпляра - PullRequest
4 голосов
/ 20 октября 2011

Я бы хотел закрыть текущее приложение и перезапустить его.Я видел много сообщений на эту тему, однако ни один из них, похоже, не работает для меня.

Я пытался

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

Однако это только перезапускает приложение один раз.Если я снова нажму кнопку «перезапустить» (в уже перезапущенном приложении), она только закроется.

Я также попытался запустить новый System.Diagnostics.Process и закрыть текущий процесс, но опять-таки этого не происходит.перезагрузить, он просто закрывается.

Как я могу перезапустить мое текущее приложение WPF?

1 Ответ

2 голосов
/ 20 октября 2011

Вы можете создать другое приложение, которое вы запускаете при выходе из приложения и которое в свою очередь запускает ваше приложение снова.Вроде как работает патчер, только ничего не исправляя.С другой стороны, у вас может быть цикл в «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 , который будет перебирать список процессов всех запущенных процессов - checkiNG, если Process2BRestarted все еще работает.Если процесс больше не отображается в списке, он теперь запустит новый процесс Process2BRestarted.exe и завершится сам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...