Подтвердить что ты не робот

Перезапустите приложение WPF после обновления после клика (запустите новую версию)

Как перезапустить приложение WPF после его обновления с помощью клика один раз, мне нужно запустить новую версию!

4b9b3361

Ответ 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();".

Готово!