Wie erstelle ich mein eigenes URL-Protokoll? (zB so: //…) [geschlossen]


212

Ich habe gesehen:

  • http://www...
  • ftp://blah.blah...
  • file://blah.blah...
  • unreal://blah.blah...
  • mailto://blah.blah...

Wie heißt dieser erste Abschnitt, in dem Sie sehen httpund dergleichen?

Kann ich meine eigenen registrieren?


5
Ich bin mir nicht sicher, ob dies die Tags c # und .net benötigt, aber es ist breiter.
Rob Hruska

Das ist fair. Ich habe es nur so markiert, weil wir vorhatten, C # zu verwenden, um so etwas zu implementieren. Trotzdem danke. :-)
Michael Beck

14
Der korrekte Name lautet "Schema" (siehe RFC 2616 und 2396). Selbst wenn viele URL-Schemata nach Protokollen benannt sind, bedeutet dies nicht, dass der einzige Weg, auf die Ressource zuzugreifen, über das Protokoll erfolgt
Marek

Es gibt zwei Arten von Protokollen, aber ich weiß nicht, welchen Begriff ich verwenden soll, um sie zu unterscheiden. Die Protokolle "Datei" und "Mailto" werden im Client verarbeitet. Die Protokolle "http" und "ftp" werden auf dem Server verarbeitet. Zuerst war ich verwirrt von den Antworten für Protokolle, die im Browser verarbeitet wurden, wenn ich etwas möchte, das auf dem Server verarbeitet wird.
user34660

Antworten:


203

Der Teil mit dem HTTP://, FTP://wird usw. genannt URI Schemes

Sie können Ihre eigenen über die Registrierung registrieren.

HKEY_CLASSES_ROOT/
  your-protocol-name/
    (Default)    "URL:your-protocol-name Protocol"
    URL Protocol ""
    shell/
      open/
        command/
          (Default) PathToExecutable

Quellen: https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml , http://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx


19
Was ist mit Nicht-Windows-Betriebssystemen?
Bdoserror

9
"Was ist mit Nicht-Windows-Betriebssystemen?" Es ist anwendungsspezifisch. Ich denke, es ist auch unter Windows häufig anwendungsspezifisch (dies wird nicht alles auf magische Weise funktionieren lassen).
Calum

2
Definiere alles. Der Registrierungseintrag weist Windows an, den Uri mit diesem Protokoll an die angegebene Anwendung zu übergeben. Alles andere sollte von der Anwendung selbst erledigt werden.
James Gregory

5
Der steckbare Protokollhandler ist definitiv die bessere Wahl.

8
(Default)hier bedeutet leere Zeichenfolge. Nimm es nicht wörtlich.
Deerchao

56

Öffnen Sie den Editor und fügen Sie den folgenden Code ein. Ändern Sie "YourApp" in den Namen Ihrer App. Speichern Sie es in YourApp.reg und führen Sie es aus, indem Sie im Explorer darauf klicken. Das ist es! Prost! Erwin Haantjes

REGEDIT4

[HKEY_CLASSES_ROOT\YourApp]
@="URL:YourApp Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\YourApp\DefaultIcon]
@="\"C:\\Program Files\\YourApp\\YourApp.exe\""

[HKEY_CLASSES_ROOT\YourApp\shell]

[HKEY_CLASSES_ROOT\YourApp\shell\open]

[HKEY_CLASSES_ROOT\YourApp\shell\open\command]
@="\"C:\\Program Files\\YourApp\\YourApp.exe\" \"%1\" \"%2\" \"%3\" \"%4\" \"%5\" \"%6\" \"%7\" \"%8\" \"%9\""

2
wie man vom Explorer anruft, was ist die URL
imp

@imp, es ist keine gute Idee, .reg-Dateien aus dem (Internet-) Explorer aufzurufen. Sie können den Befehl start verwenden, um eine Registrierungsdatei auszuführen, z. B. 'start yourregfile.reg'. Sie erhalten jedoch eine Eingabeaufforderung vom Betriebssystem, um sicherzugehen, dass Sie sie der Registrierung hinzufügen. Dazu muss der Benutzer über Administratorrechte verfügen.
Codebeat

Eigentlich frage ich zu dieser Frage stackoverflow.com/questions/24265292/… .
Kobold

3
Die% 1% 2 usw. in der Registrierungsdatei sind die Argumente für Ihre App. Also, wenn Sie YourApp.exe "Ihr Argument" tun, also% 1 == "Ihr Argument"
Codebeat

1
Nur% 1 ist wichtig, es gibt keine Möglichkeit, in der URL% 2 und% 3 usw. anzugeben
Trident D'Gao

39

Dies ist für jeden Browser unterschiedlich. In IE und Windows müssen Sie einen so genannten steckbaren Protokollhandler erstellen.

Die grundlegenden Schritte sind wie folgt:

  1. Implementieren Sie die IInternetProtocol-Schnittstelle.
  2. Implementieren Sie die IInternetProtocolRoot-Schnittstelle.
  3. Implementieren Sie die IClassFactory-Schnittstelle.
  4. Optional. Implementieren Sie die IInternetProtocolInfo-Schnittstelle. Das HTTP-Protokoll wird vom Transaktionshandler unterstützt.
  5. Wenn IInternetProtocolInfo implementiert ist, unterstützen Sie PARSE_SECURITY_URL und PARSE_SECURITY_DOMAIN, damit der URL-Sicherheitszonenmanager die Sicherheit ordnungsgemäß handhaben kann. Schreiben Sie den Code für Ihren Protokollhandler.
  6. Unterstützen Sie BINDF_NO_UI und BINDF_SILENTOPERATION.
  7. Fügen Sie in der Registrierung unter HKEY_CLASSES_ROOT \ PROTOCOLS \ Handler einen Unterschlüssel für Ihren Protokollhandler hinzu.
  8. Erstellen Sie unter dem Unterschlüssel den Zeichenfolgenwert CLSID und setzen Sie die Zeichenfolge auf die CLSID Ihres Protokollhandlers.

Siehe über Asynchronous Pluggable Protocols auf MSDN für weitere Details über die Windows - Seite. Es gibt auch ein Beispiel im Windows SDK.

Ein kurzer Blick auf Google zeigte diesen Artikel auch auf codeproject: http://www.codeproject.com/KB/IP/DataProtocol.aspx .

Schließlich muss ich als Sicherheitsmann darauf hinweisen, dass dieser Code kampferprobt werden muss. Es ist mit einem hohen Risiko verbunden, da Sie dies nicht in verwaltetem Code tun können und dies in C ++ tun müssen (ich nehme an, Sie könnten VB6 verwenden). Sie sollten überlegen, ob Sie dies wirklich tun müssen, und wenn Sie dies tun, entwerfen Sie es sorgfältig und codieren Sie es sicher. Ein Angreifer kann den Inhalt, der an Sie weitergegeben wird, einfach steuern, indem er einfach einen Link auf eine Seite einfügt. Wenn Sie beispielsweise einen einfachen Pufferüberlauf haben, kann dies niemand besser tun:<a href="custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>

Erwägen Sie nachdrücklich die Verwendung von strsafe und der neuen sicheren CRT-Methoden, die in den VC8- und höheren Compilern enthalten sind. Siehe http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx, wenn Sie keine Ahnung haben, wovon ich spreche.


6
Dies ist nur ein Beispiel für etwas, das Benutzer dazu verleitet, darauf zu klicken.
Peter Oehlert

Bitte erklären Sie dies: «
Um

2
Dies ist aus dem Zeitrahmen von .Net 2.0 zur Laufzeit (beachten Sie, dies beinhaltete 3.0 und 3.5). Es wurden keine unterschiedlichen CLR-Laufzeiten im selben Prozess unterstützt. Wenn ich also einen 1.0-Handler und Sie einen 2.0-Handler geschrieben hätten und unsere beiden Produkte auf einem Kundencomputer installiert wären, würden wir zusammen sicherstellen, dass der Browser jedes Mal abstürzt es startete. Die 4.0-Laufzeit hat versucht, dieses Problem anzugehen, aber ich erinnere mich, dass es immer noch Grenzfälle gab, über die man sich Sorgen machen musste. Aber das Wesentliche ist, dass .NET-Objekte für Plugins in nativen Prozessen unbedingt vor 4.0 vermieden werden sollten und möglicherweise noch Eckfälle zu befürchten sind.
Peter Oehlert

19

Hier ist eine Liste der registrierten URI-Schemata . Jeder hat einen RFC - ein Dokument, das ihn definiert, was fast ein Standard ist. Der RFC teilt den Entwicklern neuer Anwendungen (wie Browser, FTP-Clients usw.) mit, was sie unterstützen müssen. Wenn Sie ein neues Basisprotokoll benötigen, können Sie ein nicht registriertes Protokoll verwenden. Die anderen Antworten sagen Ihnen, wie. Bitte denken Sie daran, dass Sie mit den vorhandenen Protokollen viele Dinge tun können, um die vorhandenen Implementierungen zu erhalten.


6
Ungeachtet der technischen Details, wie ein Protokoll unter Windows funktioniert, ist dies die wichtigste Antwort. Sie sollten kein neues URI-Schema erstellen, es sei denn, es ist bei IETF registriert oder Sie verwenden einen experimentellen Namespace (wie ein X-Präfix)
Alnitak

4

Für die meisten Microsoft-Produkte (Internet Explorer, Office, Dialogfelder zum Öffnen von Dateien usw.) können Sie eine Anwendung registrieren , die ausgeführt werden soll, wenn URI mit dem entsprechenden Präfix geöffnet wird. Dies ist Teil einer allgemeineren Erklärung - wie Sie Ihr eigenes Protokoll implementieren.

Für Mozilla ist die Erklärung hier , Java - hier .


2

Es heißt das Protokoll. Das einzige, was Sie daran hindert, Ihr eigenes Protokoll zu erstellen, ist, dass Sie:

  1. Schreiben Sie einen Browser oder Benutzeragenten, der dieses Protokoll sowohl in seiner URL-Form als auch im tatsächlichen Datenformat versteht
  2. Schreiben Sie einen Server, der dieses Protokoll versteht
  3. Stellen Sie vorzugsweise eine Spezifikation für das Protokoll bereit, damit Browser und Server weiterhin zusammenarbeiten können.

Windows macht # 1 wirklich einfach, und in vielen Fällen ist dies alles, was Sie tatsächlich brauchen. Nämlich:

Registrieren einer Anwendung in einem URL-Protokoll


1

Der erste Abschnitt heißt Protokoll und ja, Sie können Ihr eigenes registrieren. Unter Windows (wo ich davon ausgehe, dass Sie dies mit dem C # -Tag tun - sorry Mono-Fans) erfolgt dies über die Registrierung .



-10

Sie müssen sich nicht wirklich als solche registrieren. Ich habe viele Programme wie Emule gesehen, die ihre eigenen Protokollspezifizierer erstellt haben (so heißt es meiner Meinung nach). Danach müssen Sie im Grunde nur noch einige Werte in der Registrierung festlegen, welches Programm dieses Protokoll verarbeitet. Ich bin mir nicht sicher, ob es eine offizielle Registrierung von Protokollspezifizierern gibt. Es gibt nicht wirklich viel, was Sie davon abhält, einen eigenen Protokollspezifizierer für Ihre eigene Anwendung zu erstellen, wenn Sie möchten, dass Benutzer Ihre App über ihren Browser öffnen.


4
-1: irreführend, verwendet ungenaue Nomenklatur und liefert keinen wirklichen Wert
Marek
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.