04 August 2013 Protocol, URI Robert Muehsig

Aus einer Desktop Anwendung ein Link aufrufen ist eine recht triviale Angelegenheit – andersherum allerdings nicht ganz so offensichtlich.

Möchte man eine lokale (Windows-) Anwendung über eine Web-Applikationen “fernsteuern” gibt es einen recht eleganten Weg: Custom URI Handler.

Wie sieht das in der Realität aus?

Nehmen wir als Beispiel GitHub. Hat man den GitHub for Windows Client installiert funktioniert das “Clonen” (jedenfalls im Chrome bei mir) mit einem klick.

image

Interessant ist hier natürlich die URI die verwendet wird “github-windows://…”

Anderes Beispiel wäre Spotify:

Bevor es bei Spotify den Web-Player gab musste man zwangsläufig auch immer die Applikation haben. Auch hier gibt es ein besonderes URI-Schema, z.B. wenn ich dies aufrufe “spotify:track:4bz7uB4edifWKJXSDxwHcs” möchte das System auch den Spotify-Player öffnen:

image

Letztes Beispiel: Auch über die TFS WebApp kann ich Visual Studio öffnen lassen:

image

Ok… cool – wie funktioniert das genau?

Die genauste Beschreibung davon findet man in der MSDN. Aber das ganze basiert im Grunde nur auf Registry-Einträgen.

Unter “HKEY_CURRENT_USER\Software\Classes” (bzw. HKEY_LOCAL_MACHINE) müsste z.B. solch ein Eintrag gemacht werden:

image

Das “DefaultIcon” enthält nur das Icon. Unter “command” ist am Ende der wirkliche Aufruf wobei “%1” mit dem Teil der nach “spotify:…” ersetzt wird.

[HKEY_CURRENT_USER\Software\Classes\spotify]
"URL Protocol"=""

[HKEY_CURRENT_USER\Software\Classes\spotify\DefaultIcon]
@="\"C:\\Users\\Robert\\AppData\\Roaming\\Spotify\\Spotify.exe\",0"

[HKEY_CURRENT_USER\Software\Classes\spotify\shell]

[HKEY_CURRENT_USER\Software\Classes\spotify\shell\open]

[HKEY_CURRENT_USER\Software\Classes\spotify\shell\open\command]
@="\"C:\\Users\\Robert\\AppData\\Roaming\\Spotify\\Spotify.exe\" /uri %1"

Default Programs – Set Associations

In Windows kann man über die System-Steuerung die Standard-Programme für einen bestimmten Datei-Typ oder Protokoll wählen, allerdings taucht keines unserer 3 Beispiele da auf. Evtl. könnte man dies beheben wenn man diesen MSDN Artikel vollständig versteht (und mal ausprobieren würde) – für die Funktionsweise des eigenen URI-Handlers ist das aber kein Problem. Wer das rausbekommt kann mir aber gern die Lösung in den Kommentaren schreiben :)

image

Windows 8 & Metro-Apps

Seit Windows 8 gibt es eine ganze Reihe an neuen URI-Handlers, so z.B. die verschiedenen Bing-Apps. Auch die eigene Windows 8 App kann Dateitypen bzw. Protokolle adressieren. Ähnliches geht auch für Windows Phone 8. Die Registry-Einträge für die Metro-Apps sind im Grunde nur Einzeiler und wie genau das da funktioniert weiss ich leider auch noch nicht.

Fazit

Man kann sehr einfach eigene Protokoll-Handler in Windows integrieren und das solch eine Verbindung zwischen Web- und Desktop Sinn macht sieht man z.B. an GitHub sehr gut.


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!