Используя то, что предоставил Майкл:
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 в очень скрытое местоположение)
Если вы действительно-действительно хотите, вы могли бы в последнем выражении else вместо создания исключения создать файл appref-ms
(поможет Google) в каталоге temp и выполнить его.