2008-09-17 9 views
40

Wie registriere ich ein benutzerdefiniertes Protokoll mit Windows, so dass beim Klicken auf einen Link in einer E-Mail oder auf einer Webseite meine Anwendung geöffnet wird und die Parameter von der URL an sie übergeben werden?Wie registriere ich ein benutzerdefiniertes URL-Protokoll in Windows?

+0

Mögliche Duplikate von [Wie erstelle ich mein eigenes URL-Protokoll? (zB so: // ...)] (http://stackoverflow.com/questions/389204/how-do-i-create-my-own-url-protocol-eg-so) –

Antwort

23

Ich denke, das ist in MSDN abgedeckt, siehe Registering an Application to a URL Protocol.

+0

Dies funktioniert nur für IE. – Oded

+5

Ich schrieb die oauth-basierte Anwendung und das in der MSDN beschriebene Verfahren funktioniert perfekt mit Mozilla Firefox und Opera (11.6) –

+9

Dies funktioniert in allen Browsern unter Windows. Es ist eine os-Level-Sache, keine Browser-Level-Sache. –

19

Die MSDN-Verbindung ist nett, aber die Sicherheitsinformationen sind nicht vollständig. Die Handlerregistrierung sollte "% 1", nicht% 1 enthalten. Dies ist eine Sicherheitsmaßnahme, da einige URL-Quellen% 20 falsch decodieren, bevor Sie Ihren benutzerdefinierten Protokollhandler aufrufen.

PS. Sie erhalten die gesamte URL und nicht nur die URL-Parameter. Aber die URL könnte, abgesehen von der bereits erwähnten% 20-> Space-Konvertierung, etwas missbraucht werden. Es hilft, in Ihrem URL-Syntaxentwurf konservativ zu sein. Werfen Sie nicht zufällig // oder Sie werden in das Chaos geraten, dass Datei: // ist.

+0

Was genau meinen Sie mit "Chaos, dass die Datei: //" ist? – Maleev

+5

Es gibt keine formale Zuordnung von Datei: URLs zu lokalen Pfaden. Es gibt nicht einmal einen Konsens über die Verwendung von zwei oder drei führenden Schrägstrichen oder die Verwendung von Vorwärts- oder Rückwärtsstrichen, wenn der Pfad auf ein Windows-Verzeichnis verweist. – MSalters

+0

Später Kommentar, ich weiß. Aber ist es auch möglich, irgendwie auf die URL-Parameter * nur * zuzugreifen, ohne den Protokoll-Handler? –

10
  1. Zum Start dann in Find Typ regedit -> sollte es öffnen Registry editor

  2. Klicken Sie rechte Maus auf HKEY_CLASSES_ROOT dann New ->Key

enter image description here

  1. Im Schlüssel den Klein Namen geben, mit denen Sie Urls wollen aufgerufen werden (in meinem Fall wird es testus://sdfsdfsdf), dann klicken rechte Maus auf testus -> dann New ->String Value und fügen Sie URL protocol ohne Wert hinzu.

enter image description here

  1. Dann weitere Einträge hinzufügen, wie Sie mit Protokoll taten (rechte MausNew ->Key) und Hierarchie erstellen wie testus ->shell ->open ->command und innerhalb command ändern Sie (Default) in den Pfad, wo .exe Sie starten möchten, ist, wenn Sie Parameter an Ihre Exe übergeben wollen, dann wrappen Sie den Pfad zu exe in "" und fügen Siehinzuwie folgt aussehen: "c:\testing\test.exe" "%1"

enter image description here

  1. Um zu testen, ob sie gehen zu Internet Explorer (nicht Chrome oder Firefox) funktioniert, und geben Sie testus:have_you_seen_this_man das Feuer sollte Ihre .exe (geben Sie einige Aufforderungen, dass Sie dies tun möchten - sagen Sie ja) und übergeben Sie in Args testus://have_you_seen_this_man.

Hier Probe Konsole App-Test:

using System; 

namespace Testing 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      if (args!= null && args.Length > 0) 
      Console.WriteLine(args[0]); 
      Console.ReadKey(); 
     } 
    } 
} 

Hoffnung das spart Ihnen einige Zeit.