12 votes

Lancement d'une application ClickOnce à partir d'une autre application ClickOnce

Mon objectif est de parvenir à lancer mon application ClickOnce en un clic (ou deux, je suppose). L'application a quelques prérequis qui doivent être installés. La façon normale de s'assurer qu'ils sont installés que Microsoft fournit implique que l'utilisateur décide s'il a les prérequis ou non et télécharge et installe un "setup.exe" qui les installe et exécute l'application ClickOnce. Cela implique de télécharger le fichier EXE (un clic), de l'exécuter (deux clics), puis, une fois les prérequis installés, de cliquer à nouveau pour exécuter l'application ClickOnce.

J'essaie de réduire ce processus à un ou deux clics : - Cliquez sur un lien sur mon site Web vers le site ClickOnce. .application fichier. - Cliquez à nouveau pour l'exécuter.

J'ai créé une AUTRE application ClickOnce, qui comprend un setup.exe. Il vérifie si les prérequis sont installés, et s'ils le sont, il exécute automatiquement l'autre application ClickOnce. Sinon, il exécute le setup.exe inclus, puis l'autre application ClickOnce.

Le problème est que lorsque j'essaie d'exécuter l'autre application ClickOnce à partir de celle-ci, elle ouvre simplement mon navigateur Web et télécharge le fichier .application sans l'exécuter.

J'essaie d'utiliser ce qui suit pour lancer l'application ClickOnce à partir de mon code C# :

Process.Start(ApplicationURL);

Je veux simplement que l'application soit lancée automatiquement à l'adresse ApplicationURL. Existe-t-il un moyen d'éviter l'implication du navigateur que je vois ?

(Ma question est très similaire à la question de Stack Overflow Exécuter une application ClickOnce à partir d'une page web sans action de l'utilisateur ).

18voto

Tommy Vernieri Points 408

Comme cela a été souligné dans les commentaires, vous pouvez commencer le iexplore.exe pour lancer une application ClickOnce sans aucune dépendance avec le navigateur par défaut. Vous pouvez également lancer l'application ClickOnce de la même manière que l'Explorateur Windows, en utilisant la commande suivante dfshim.dll .

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

Il existe quelques autres articles en ligne qui traitent de l'utilisation de cette stratégie, mais je n'ai pas trouvé de documentation officielle sur dfshim.dll,ShOpenVerbApplication.

  • Une autre question de Stack Overflow mentionne l'utilisation d'un .exe personnalisé pour installer le .NET Framework et lancer ensuite une application ClickOnce via ShOpenVerbApplication.
  • Scott Hanselman discuter de ShOpenVerbApplication comme mappage de fichier par défaut pour les fichiers ayant le type MIME application/x-ms-application dans un article sur Firefox et ClickOnce.

Mise à jour

Comme le mentionne l'autre question de Stack Overflow, vous pouvez également utiliser dfshim.dll 's LaunchApplication qui est documenté sur le site de Microsoft . Toutefois, cette commande n'est pas disponible dans certaines versions plus anciennes de .NET Framework.

1voto

dgp Points 68

Jetez un coup d'œil à la Microsoft walkthrough pour une installation manuelle via InPlaceHostingManager . Vous avez la possibilité de personnaliser par programme.

1voto

DavisNT Points 626

Il existe au moins 2 autres méthodes pour lancer les applications ClickOnce.

Une méthode simple consiste à Process.Start("PresentationHost.exe", "-launchApplication " + ApplicationURL); tel que documenté par Microsoft aquí .

Une méthode plus sophistiquée consiste à appeler ShellExecuteEx() Win32 API avec un code comme celui-ci :

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);

Les définitions d'importation et de structure de l'API Win32 requises se trouvent à l'adresse suivante aquí . Cette méthode interrogera le registre et exécutera "rundll32.exe dfshim.dll,ShOpenVerbApplication" (ou tout autre élément configuré dans l'onglet HKEY_CLASSES_ROOT \Application.Manifest ).

0voto

windson Points 130

Voici les moyens de lancer clickonce.application

Approche 1 : Lancement à partir d'une URL

Méthode 1 :

string app = "http://domain.xyz/ClickOnce.application";
Process.Start("rundll32.exe", "dfshim.dll,ShOpenVerbApplication " + app);

Méthode 2 :

string app = "http://domain.xyz/ClickOnce.application";
Process.Start("IExplore.exe", app);

Approche 2 : Lancement direct de ClickOnce.application à partir du fichier .application

string app = "file://C:/ClickOnce.application";
Process.Start("rundll32.exe", "dfshim.dll,ShOpenVerbApplication " + app);

0voto

Chris Guzak Points 113

Et une autre option consiste à utiliser Lanceur::LaunchUriAsync avec LauncherOptions.ContentType = "application/x-ms-application". C'est ce qu'on appelle un "uri direct invoke".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X