如何让 Internet Explorer 正确处理自定义协议处理程序?

How do I get Internet Explorer to handle custom protocol handlers correctly?

我想要一个我正在开发的网站,可以在 ssh://0.0.0.0 类型的 url 上打开 PuTTY。我在 Chrome 和 Firefox 中使用此功能,但在 Internet Explorer 中出现以下错误:

Windows cannot access the specified device, path, or file. You may not have the appropriate permissions to access this item.

其次是:

Unable to open this helper application for ssh://0.0.0.0/.

The protocol specified in this address is not valid. Make sure the address is correct, and try again.

这是我的注册表项:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\ssh]
@="URL:SSH Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\ssh\shell]

[HKEY_CLASSES_ROOT\ssh\shell\open]

[HKEY_CLASSES_ROOT\ssh\shell\open\command]
@="cmd /k set in=\"%l\" & call set in=%%in:ssh:=%% & call set in=%%in:/=%% & call \"C:\Program Files (x86)\PuTTY\putty.exe\" %%in%% & exit"

我做了一个快速实验,看起来问题是由于 cmdcall。一旦我删除它们,我就会得到预期的结果。但是,我仍然需要进行字符串操作,因为 PuTTY(以及使用 RealVNC VNC Viewer 的 vnc url 的相同情况)只需要没有协议前缀的主机。

编辑:似乎 cmd 只是导致问题的原因。 call 可用于预期行为。

我猜 Internet Explorer 调用 cmd.exe 时存在权限问题。相反,我不得不完全从 PowerShell 开始。这是工作注册表项,绝对没有我在网上找到的一些解决方法中显示的其他脚本或 PuTTY 程序修改:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\ssh]
@="URL:SSH Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\ssh\shell]

[HKEY_CLASSES_ROOT\ssh\shell\open]

[HKEY_CLASSES_ROOT\ssh\shell\open\command]
@="C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command \"$uri = [System.Uri]'%l';&\"${env:ProgramFiles}\PuTTY\putty.exe\" -P $uri.Port $uri.GetComponents([System.UriComponents]::UserInfo -bor [System.UriComponents]::Host, [System.UriFormat]::UriEscaped)\""

我现在可以从所有三个主要浏览器打开 SSHVNC 链接。