Enregistrement d’un gestionnaire de protocole dans Windows 8

J’essaie d’enregistrer mon application qui gérera l’ouverture des liens, par exemple, http://stackoverflow.com . Je dois le faire explicitement pour Windows 8, je le fais dans les versions antérieures de Windows. Selon MSDN, cela a changé dans Win8.

Je suis passé par la page Programmes par défaut sur MSDN (msdn.microsoft.com/en-us/library/cc144154.aspx) sur MSDN. Il fournit une excellente solution pour gérer les types de fichiers, mais il est clair sur les détails des protocoles. L’enregistrement d’une application dans un protocole d’URL ne couvre que les étapes impliquées dans la configuration d’un nouveau protocole, mais pas comment append correctement un nouveau gestionnaire à un protocole existant.

J’ai également essayé les parameters de registre décrits dans d’autres publications SO.

Encore une chose, l’application n’est pas une application Metro / Windows Store. L’ajout d’une entrée dans le manifeste ne fonctionnera donc pas pour moi.

Vous étiez sur la bonne voie avec la page Web Default Programs – en fait, c’est ma référence pour ce post.

Ce qui suit adapte leur exemple:

Tout d’abord, vous avez besoin d’un ProgID dans HKLM\SOFTWARE\Classes qui dicte comment gérer toute entrée qui lui est donnée (la vôtre peut déjà exister):

 HKLM\SOFTWARE\Classes MyApp.ProtocolHandler //this is the ProgID, subkeys are its properties (Default) = My Protocol //name of any type passed to this DefaultIcon (Default) = %ProgramFiles%\MyApp\MyApp.exe, 0 //for example shell open command (Default) = %ProgramFiles%\MyApp\MyApp.exe %1 //for example 

Remplissez ensuite le registre avec les informations DefaultProgram dans une clé Capabilities :

 HKLM\SOFTWARE\MyApp Capabilities ApplicationDescription URLAssociations myprotocol = MyApp.ProtocolHandler //Associated with your ProgID 

Enfin, enregistrez les fonctionnalités de votre application avec DefaultPrograms:

 HKLM\SOFTWARE RegisteredApplications MyApplication = HKLM\SOFTWARE\MyApp\Capabilities 

Désormais, tous les liens “myprotocol:” doivent déclencher %ProgramFiles%\MyApp\MyApp.exe %1 .

Note latérale, car il s’agit d’une réponse de premier ordre trouvée lors de la recherche sur Google de ce type de problème: assurez-vous que le chemin d’access dans la commande shell est un chemin approprié vers votre application. J’ai passé toute une journée à résoudre les problèmes de débogage qui ne semblaient affecter que Chrome et Edge sur Windows 10. Ils n’ont jamais déclenché le gestionnaire de protocole pendant que Firefox le faisait. Quel était le problème? Le chemin d’access au fichier .bat utilisé mixte \ et / slash. En utilisant uniquement des barres obliques correctes dans le chemin, Edge et Chrome ont soudainement pu récupérer la requête.

LaunchUriAsync (Uri)

Démarre l’application par défaut associée au nom du schéma URI pour l’URI spécifié. Vous pouvez autoriser l’utilisateur à spécifier, dans ce cas.

http://msdn.microsoft.com/library/windows/apps/Hh701476

  // Create the URI to launch from a ssortingng. var uri = new Uri(uriToLaunch); // Calulcate the position for the Open With dialog. // An alternative to using the point is to set the rect of the UI element that sortingggered the launch. Point openWithPosition = GetOpenWithPosition(LaunchUriOpenWithButton); // Next, configure the Open With dialog. // Here is where you choose the program. var options = new Windows.System.LauncherOptions(); options.DisplayApplicationPicker = true; options.UI.InvocationPoint = openWithPosition; options.UI.PreferredPlacement = Windows.UI.Popups.Placement.Below; // Launch the URI. bool success = await Windows.System.Launcher.LaunchUriAsync(uri, options); if (success) { // URI launched: uri.AbsoluteUri } else { // URI launch failed. uri.AbsoluteUri }