如何创建自己的URL协议? (例如:// ...)

时间:2008-12-23 15:45:42

标签: windows protocols protocol-handler

我见过:

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

您看到http之类的第一部分是什么?

我可以自己注册吗?

9 个答案:

答案 0 :(得分:189)

包含HTTP://FTP://等的部分称为URI Schemes

您可以通过注册表注册自己的。

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

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

答案 1 :(得分:54)

打开记事本并将下面的代码粘贴到其中。将“YourApp”更改为您应用的名称。 将其保存到YourApp.reg并通过在资源管理器中单击它来执行它。 而已! 干杯! 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 :(得分:38)

这对于每个浏览器都是不同的,在IE和Windows中,您需要创建他们称之为可插入协议处理程序的浏览器。

基本步骤如下:

  1. 实施IInternetProtocol接口。
  2. 实施IInternetProtocolRoot接口。
  3. 实现IClassFactory接口。
  4. 可选。实现IInternetProtocolInfo接口。事务处理程序提供对HTTP协议的支持。
  5. 如果实现了IInternetProtocolInfo,请提供对PARSE_SECURITY_URL和PARSE_SECURITY_DOMAIN的支持,以便URL安全区域管理器可以正确处理安全性。 编写协议处理程序的代码。
  6. 提供对BINDF_NO_UI和BINDF_SILENTOPERATION的支持。
  7. 在HKEY_CLASSES_ROOT \ PROTOCOLS \ Handler下的注册表中为协议处理程序添加一个子项。
  8. 在子项下创建一个字符串值CLSID,并将字符串设置为协议处理程序的CLSID。
  9. 有关Windows端的更多详细信息,请参阅About Asynchronous Pluggable Protocols on MSDN。 Windows SDK中还有一个示例。

    快速谷歌也在codeproject上展示了这篇文章:http://www.codeproject.com/KB/IP/DataProtocol.aspx

    最后,作为安全人员,我必须指出这段代码需要加强战斗力。这是一个很高的风险,因为要可靠地做到这一点,你不能在托管代码中做到这一点,并且必须用C ++做(我想你可以使用VB6)。您应该考虑是否真的需要这样做,如果您这样做,请仔细设计并安全地编码。攻击者可以通过简单地在页面上包含链接来轻松控制传递给您的内容。例如,如果您有一个简单的缓冲区溢出,那么没有人更好地执行此操作:<a href="custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>

    强烈考虑使用VC8及以上编译器中包含的strsafe和新的安全CRT方法。如果您不知道我在说什么,请参阅http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx

答案 3 :(得分:18)

以下是已注册URI schemes的列表。每个人都有一个RFC - 一个定义它的文档,几乎是一个标准。 RFC告诉开发人员他们需要支持的新应用程序(例如浏览器,ftp客户端等)。如果您需要新的基本级协议,则可以使用未注册的协议。其他答案告诉你如何。请记住,您可以使用现有协议做很多事情,从而获得现有的实现。

答案 4 :(得分:4)

对于大多数Microsoft产品(Internet Explorer,Office,“打开文件”对话框等),您可以在打开具有适当前缀的URI时运行register an application。这是更常见的explanation的一部分 - 如何实现自己的协议。

对于Mozilla,解释是here,Java - here

答案 5 :(得分:2)

它被称为协议。唯一阻止你制定自己的协议的是你必须:

  1. 以URL形式和实际数据格式编写一些了解该协议的浏览器或用户代理
  2. 编写了解该协议的服务器
  3. 最好具有协议规范,以便浏览器和服务器可以继续协同工作。
  4. Windows使#1变得非常简单,在很多情况下,这就是你真正需要的。即:

    Registering an Application to a URL Protocol

答案 6 :(得分:1)

第一部分称为协议,是的,您可以注册自己的协议。在Windows上(我假设你正在使用C#标签做这个 - 对不起Mono粉丝),它完成了via the registry

答案 7 :(得分:0)

协议?

我发现了这一点,它似乎是计算机的本地设置......

http://kb.mozillazine.org/Register_protocol

答案 8 :(得分:-9)

你真的不需要做任何注册。我见过许多程序,比如emule,创建自己的协议特定程序(这就是我认为的所谓)。之后,您基本上只需在注册表中设置一些值来处理该协议的程序。我不确定是否有任何协议说明符的正式注册表。如果您希望人们通过浏览器打开您的应用程序,那么阻止您为自己的应用程序创建自己的协议说明符并没有太大的作用。