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

Как перезапустить приложение WPF? В Windows Forms я использовал

System.Windows.Forms.Application.Restart();

Как это сделать в WPF?

Я нашел это: он работает. Но. Есть ли лучший способ?

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

Я использовал это в WPF, успешно:

 System.Windows.Forms.Application.Restart(); System.Windows.Application.Current.Shutdown(); 
 Application.Restart(); 

или

 System.Diagnostics.Process.Start(Application.ExecutablePath); Application.Exit(); 

В моей программе у меня есть мьютекс, чтобы обеспечить только один экземпляр приложения, запущенного на компьютере. Это привело к тому, что вновь запущенное приложение не запускалось, потому что мьютекс не был выпущен своевременно. В результате я поместил значение в Properties.Settings, который указывает, что приложение перезагружается. Перед вызовом Application.Restart () значение Properties.Settings установлено равным true. В Program.Main () я также добавил проверку для этого конкретного значения property.settings, так что когда true, он сбрасывается на false и появляется Thread.Sleep (3000);

В вашей программе у вас может быть логика:

 if (ShouldRestartApp) { Properties.Settings.Default.IsRestarting = true; Properties.Settings.Default.Save(); Application.Restart(); } 

В Program.Main ()

 [STAThread] static void Main() { Mutex runOnce = null; if (Properties.Settings.Default.IsRestarting) { Properties.Settings.Default.IsRestarting = false; Properties.Settings.Default.Save(); Thread.Sleep(3000); } try { runOnce = new Mutex(true, "SOME_MUTEX_NAME"); if (runOnce.WaitOne(TimeSpan.Zero)) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } finally { if (null != runOnce) runOnce.Close(); } } 

Вот и все.

 Application.Current.Shutdown(); System.Windows.Forms.Application.Restart(); 

В этом порядке работал для меня, наоборот, только что начал другой экземпляр приложения.

Запускает новый экземпляр программы по командной строке после 1 секунды задержки. Во время выключения текущего экземпляра задержки.

 ProcessStartInfo Info = new ProcessStartInfo(); Info.Arguments = "/C choice /CY /N /DY /T 1 & START \"\" \"" + Assembly.GetExecutingAssembly().Location + "\""; Info.WindowStyle = ProcessWindowStyle.Hidden; Info.CreateNoWindow = true; Info.FileName = "cmd.exe"; Process.Start(Info); Application.Current.Shutdown(); 

Эти предлагаемые решения могут работать, но, как заметил еще один комментатор, они чувствуют себя как быстрый хак. Другой способ сделать это, который немного чище, – запустить командный файл, который включает задержку (например, 5 секунд), чтобы дождаться завершения текущего (закрывающего) приложения.

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

Пример командного файла windows (“restart.bat”):

 sleep 5 start "" "C:\Dev\MyApplication.exe" 

И в приложении WPF добавьте этот код:

 // Launch the restart batch file Process.Start(@"C:\Dev\restart.bat"); // Close the current application Application.Current.MainWindow.Close(); 
  Application.Restart(); Process.GetCurrentProcess().Kill(); 

работайте как очарование для меня

  • Отображение видимости столбцов Bind datagrid MVVM
  • Открытие нового windows в MVVM WPF
  • WPF перед записью
  • Получить активный цвет автоматической цветовой темы Windows 8
  • Программа не содержит статический «Основной» метод, подходящий для точки входа
  • Изображение кнопки мыши WPF
  • Повторить задачу несколько раз на основе пользовательского ввода в случае исключения в задаче
  • Ошибка привязки элемента ElementName
  • Force TextBlock для переноса в WPF ListBox
  • Изображение панорамы и масштабирования
  • Почему привязка данных WPF к исключению ласточки?
  • Давайте будем гением компьютера.