"Application.Restart" не работает в развернутом приложении ClickOnce

Возможный дубликат:
Почему Application.Restart() не является надежным?

Я вытащил код прямо из MSDN. Это обновляет мое приложение, но Restart() не работает. Приложение отключается, но оно не перезапускается.

Я добавил MenuItem в мой Form, чтобы проверить, что Restart() работает вообще:

private void restartToolStripMenuItem_Click(object sender, EventArgs e)
{
    Application.Restart();
}

Это перезапустит приложение (конечно, оно не выполняет никаких обновлений и инициируется пользователем, поэтому оно бесполезно).

У меня больше ничего не происходит с этим приложением. Никаких обработчиков событий для формы при выключении, ничего. Это самое основное приложение Windows Forms, которое я мог бы создать (он просто отображает ресурс JPEG в ImagePanel).

Почему Restart() не работает здесь?

Ответ 1

Является ли ваше приложение Windows Forms или WPF? Поскольку Application.Restart существует только в объекте Windows Forms Application (System.Windows.Forms.Application) и не поддерживается приложениями, запущенными под WPF Application (System.Windows.Applications). Вы все равно можете его вызвать, но поскольку контекст приложения отличается, он не работает.

Ответ 2

Если вы используете Mutex или что-то подобное, чтобы гарантировать, что только один экземпляр приложения запущен за раз, что вызывает эту проблему.

Ответ 3

Вы уверены, что вызываете Application.Restart из основной формы? Если вы вызываете форму с .ShowDialog, а затем из этой формы вызывается Application.Restart, это не сработает, потому что .ShowDialog заставляет диалоговую форму работать в отдельном потоке.

Ответ 4

Попробуйте обернуть его BeginInvoke на всякий случай, если он не находится на главном STA.

Ответ 5

Попробуйте поднять новый процесс, возможно, это может обойти это:

Process.Start(Application.ExecutablePath);