"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);