Feedback

C# - Eigenes URL-Protokoll registrieren

Veröffentlicht von am 17.10.2006
(6 Bewertungen)
HTTP-URLs kennt jeder. Die Windows-Shell ermöglicht es aber auch, eigene URL-Protokolle zu definieren. Davon machen einige Programme, wie z.B. die Visual Studio Hilfe gebrauch (ms-help:// ...). Mit ein paar Registry-Einträgen kann man auch ein eigenes URL-Protokoll einrichten. Damit lassen sich eigene Anwendungen per URL aus jeder Software ansprechen.
GFU-Schulungen  [Anzeige]

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

XML und .NET Überblick

Um auf dem neuesten Wissensstand zu sein, sollten Sie unser aktuelles ASP .NET Komplett Seminar belegen.
Nach dem Seminar kennen Sie die wichtigsten Strömungen in der Software-Technologie

// using Microsoft.Win32; nicht vergessen!

/// <summary>
/// Registriert ein benutzerdefiniertes URL-Protokoll für die Verwendung mit der
/// Windows-Shell, dem Internet Explorer und Office.
/// 
/// Beispiel für einen URL eines benutzerdefinierten URL-Protokolls:
/// 
///   rainbird://RemoteControl/OpenFridge/GetBeer
/// </summary>
/// <param name="protocolName">Name des Protokolls (z.B. "rainbird" für "rainbird://...")</param>
/// <param name="applicationPath">Vollständiger Dateisystem-Pfad zur EXE-Datei, die den URL bei Aufruf verarbeitet (Der komplette URL wird als Befehlszeilenparameter übergteben)</param>
/// <param name="description">Beschreibung (z.B. "URL:Rainbird Custom URL")</param>
public void RegisterURLProtocol(string protocolName, string applicationPath, string description)
{
    // Neuer Schlüssel für das gewünschte URL Protokoll erstellen
    RegistryKey myKey=Registry.ClassesRoot.CreateSubKey(protocolName);

    // Protokoll zuweisen
    myKey.SetValue(null, description);
    myKey.SetValue("URL Protocol", string.Empty);

    // Shellwerte eintragen
    Registry.ClassesRoot.CreateSubKey(protocolName + "\\Shell");
    Registry.ClassesRoot.CreateSubKey(protocolName + "\\Shell\\open");
    myKey = Registry.ClassesRoot.CreateSubKey(protocolName + "\\Shell\\open\\command");

    // Anwendung festlegen, die das URL-Protokoll behandelt
    myKey.SetValue(null, "\"" + applicationPath,  + "\" %1");
}

4 Kommentare zum Snippet

SimonKnight6600 schrieb am 07.11.2006:
TOP Snippet! Genau das, was ich für ein aktuelles Projekt brauche :-)
Rainbird schrieb am 08.11.2006:
Danke!
markrene schrieb am 22.02.2008:
Hallo,

Super Snippet, aber leider funktioniert es nicht bei mir.

Es erscheint keine Fehlermeldung und wenn ich mir meine Registry anschaue, dann wurde kein Eintrag gemacht. Lese ich aber Skriptseitig die Einträge aus, ist der Key und subkey vorhanden. Woran kann das liegen?

Bitte um Hilfe!

Danke

Mark

protected void Page_Load(object sender, EventArgs e)
{
string protocolName = "aaaarunapp";
//string applicationPath = "%windir%\\system32\\calc.exe";
string applicationPath = @"C:\WINDOWS\system32\calc.exe";
string description = "Calculator";

// RegisterURLProtocol();
RegisterURLProtocol(protocolName, applicationPath, description);
}

public void RegisterURLProtocol(string protocolName, string applicationPath, string description)

{
//Neuer Schlüssel für das gewünschte URL Protokoll erstellen
RegistryKey myKey = Registry.ClassesRoot.CreateSubKey(protocolName);

// Protokoll zuweisen
myKey.SetValue(null, description);
myKey.SetValue("URL Protocol", string.Empty);

// Shellwerte eintragen
Registry.ClassesRoot.CreateSubKey(protocolName + "<A>\\Shell</A>");
Registry.ClassesRoot.CreateSubKey(protocolName + "<A>\\Shell\\open</A>");
myKey = Registry.ClassesRoot.CreateSubKey(protocolName + "<A>\\Shell\\open\\command</A>");

// Anwendung festlegen, die das URL-Protokoll behandelt
myKey.SetValue(null, "\"" + applicationPath +"\" %1");

}
Jan Welker schrieb am 23.02.2008:
Frag mal im Forum nach: dotnet-forum.de
 

Logge dich ein, um hier zu kommentieren!