为什么 windows 将完整的自定义 url 包括协议传递给处理应用程序?

Why does windows pass full custom url including protocol to handling application?

我正在尝试创建自己的 URL 协议以从我们内部 CRM 中的 URL 启动自定义应用程序。

我创建了以下注册表项:

REGEDIT4

[HKEY_CLASSES_ROOT\smon1]
@="URL:smon Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\smon1\shell]

[HKEY_CLASSES_ROOT\smon1\shell\open]

[HKEY_CLASSES_ROOT\smon1\shell\open\command]
@="\"C:\smon.exe\" \"%1\"" 

我的网站上有以下 link:

<a href='smon:1955'>1955</a>

我希望这会将变量 1955 传递给应用程序 c:\smon.exe。 但是它正在传递整个变量 "smon:1955".

为什么它传递所有内容而不是变量?

我在这里错过了什么?

你没有遗漏任何东西,这就是处理程序的工作方式;整个 URI 在命令行中传递。检测并解析它。

其基本原理大概是它允许多个协议与同一个可执行文件相关联,而无需在命令键中提供自定义区分开关。

举个例子

<a href="http://www.example.com">An Example</a>

这将传递给浏览器并在 url 栏中显示为 http://www.example.com