Как перезапустить приложение WPF после его обновления с помощью клика один раз, мне нужно запустить новую версию!
Перезапустите приложение WPF после обновления после клика (запустите новую версию)
Ответ 1
Есть несколько способов, но большинство из них не работают корректно, они снова открывают старую версию.
Звучит безумно, что WPF не имеет надлежащего способа справиться с ним (#fixwpf), но вам нужно будет ссылаться на System.Windows.Forms.dll
и называть System.Windows.Forms.Application.Restart();
Быстрый поиск найден Rob Relyea сообщение о том же (XAML, WPF Microsoft Guy) http://robrelyea.wordpress.com/2007/07/24/application-restart-for-wpf/
Ответ 2
Нет необходимости включать сборку winforms только для этого, что кажется излишним.
Вы можете сделать то же самое, что winforms делает за кулисами в этом методе перезапуска. После применения обновления:
String ApplicationEntryPoint = ApplicationDeployment.CurrentDeployment.UpdatedApplicationFullName;
Process.Start(ApplicationEntryPoint);
//shutdown current instance here
Это запустит новую версию вашего приложения С помощью правильной инициализации ClickOnce.
Ответ 3
После того, как вы запустили приложение (Double-Clicked.application file, то есть), вы не заметите автоматически, так как одна вещь, которую фреймворк делает для вас при запуске, - это проверить, является ли ваша локальная версия старше, чем тот, который находится на сайте загрузки приложения.
Но вы можете использовать ApplicationDeployment-Class для проверки обновлений, у него есть все необходимые средства IIRC.
Ответ 4
Используя то, что сделал Майкл:
String ApplicationEntryPoint = ApplicationDeployment.CurrentDeployment.UpdatedApplicationFullName;
Process.Start(ApplicationEntryPoint);
В действительности проблема заключается в том, что браузеры не правильно его обрабатывают. Например, при открытии приложения Edge покинет пустую страницу браузера. Поскольку ApplicationDeployment.CurrentDeployment.UpdatedApplicationFullName
ссылается на длинный адрес URL-адреса http, существует также теоретическая вероятность того, что ваш Интернет выйдет за долю секунды после завершения загрузки, и, таким образом, ваше приложение не будет перезапущено (не может получить доступ к URL-адресу).
Вместо этого я пошел на это:
... Update()
if (System.IO.File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu) + "\\Programs\\MyCompany\\MyApp.appref-ms"))
{
System.Diagnostics.Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu) + "\\Programs\\MyCompany\\MyApp.appref-ms");
}
else if (System.IO.File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\MyApp.appref-ms"))
{
System.Diagnostics.Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\MyApp.appref-ms");
}
else throw new InvalidOperationException("Cannot restart the application, because StartMenu and Desktop shortcuts are missing!");
... shut down application (this.Close() etc.)
Это, конечно, предполагает, что вы указали свое развертывание ClickOnce для создания ярлыков и что никто не удалил их. Но вероятность этого довольно низкая. (Пользователь, вероятно, не смог выполнить ваше приложение без этих ярлыков, потому что ClickOnce разворачивает .exe в очень захороненное место)
Если вы действительно захотели, вы могли бы в последнем заявлении вместо того, чтобы бросать исключение, создать файл appref-ms
(google поможет) в каталоге temp и выполнить это.
Ответ 5
щелкните правой кнопкой мыши по ссылкам в обозревателе решений > нажмите ссылку на ссылку > щелкните по сборкам > поиск и добавьте System.Windows.Forms > в MainWindow, добавьте "System.Windows.Forms.Application.Restart();".
Готово!