Запуск приложения ClickOnce из другого приложения ClickOnce - PullRequest
12 голосов
/ 05 января 2012

Моя цель - добиться запуска приложения ClickOnce в один клик (или, я думаю, два). Приложение имеет некоторые предпосылки, которые необходимо установить. Обычный способ обеспечения их установки, предоставляемый Microsoft, заключается в том, чтобы пользователь сам решал, есть ли у него необходимые условия, и загружает и устанавливает «setup.exe», который устанавливает их и запускает приложение ClickOnce. Это включает в себя загрузку EXE-файла (один клик), его запуск (два клика), а затем после установки необходимых компонентов снова нажмите для запуска приложения ClickOnce.

Я пытаюсь сократить этот процесс до одного или двух кликов: - Нажмите ссылку на моем веб-сайте в файл ClickOnce .application. - Нажмите еще раз, чтобы запустить его.

Я сделал ДРУГОЕ приложение ClickOnce, которое включает в себя setup.exe. Он проверяет, установлены ли необходимые предварительные условия, и автоматически запускает другое приложение ClickOnce. Если нет, он запускает включенный файл setup.exe, а затем запускает другое приложение ClickOnce.

Моя проблема в том, что когда я пытаюсь запустить другое приложение ClickOnce из этого приложения, оно просто открывает мой веб-браузер и загружает файл .application без его запуска.

Я пытаюсь использовать следующее для запуска приложения ClickOnce из моего кода C #:

Process.Start(ApplicationURL);

Я просто хочу, чтобы это автоматически запускало приложение на ApplicationURL. Есть ли способ пропустить участие браузера, которое я вижу?

(Мой вопрос очень похож на вопрос переполнения стека Запуск приложения ClickOnce с веб-страницы без действий пользователя ).

Ответы [ 3 ]

17 голосов
/ 03 февраля 2012

Как указано в комментариях, вы можете запустить процесс iexplore.exe для запуска приложения ClickOnce без какой-либо зависимости от браузера по умолчанию. Вы также можете запустить приложение ClickOnce так же, как Windows Explorer запускает его, используя dfshim.dll.

Process.Start("rundll32.exe", "dfshim.dll,ShOpenVerbApplication " + ApplicationURL);

В Интернете есть несколько других статей, в которых обсуждается использование этой стратегии, но я не нашел официальной документации по dfshim.dll, ShOpenVerbApplication.

Обновление

Как уже упоминалось в другом вопросе о переполнении стека, вы также можете использовать команду dfshim.dll LaunchApplication, которая задокументирована на сайте Microsoft . Однако эта команда недоступна в некоторых старых версиях .NET Framework.

1 голос
/ 13 марта 2012

Посмотрите Microsoft пошаговое руководство для установки вручную через InPlaceHostingManager . У вас есть возможность настраивать программно.

0 голосов
/ 17 февраля 2019

Существует как минимум 2 других способа запуска приложений ClickOnce.

Один простой метод - Process.Start("PresentationHost.exe", "-launchApplication " + ApplicationURL);, как описано в Microsoft здесь .

Более сложный метод вызывает ShellExecuteEx () Win32 API с кодомкак это:

SHELLEXECUTEINFO info = new SHELLEXECUTEINFO();
info.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(info);
info.lpFile = ApplicationURL;
info.nShow = SW_SHOWNORMAL;
info.fMask = SEE_MASK_CLASSNAME;
info.lpClass = "Application.Manifest";
ShellExecuteEx(ref info);

Требуемый импорт Win32 API и определения структуры можно найти здесь .Этот метод запросит реестр и запустит «rundll32.exe dfshim.dll, ShOpenVerbApplication» (или все остальное, что настроено в HKEY_CLASSES_ROOT \ Application.Manifest ).

...