如何让 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"
我做了一个快速实验,看起来问题是由于 cmd
和 call
。一旦我删除它们,我就会得到预期的结果。但是,我仍然需要进行字符串操作,因为 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)\""
我现在可以从所有三个主要浏览器打开 SSH
和 VNC
链接。
我想要一个我正在开发的网站,可以在 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"
我做了一个快速实验,看起来问题是由于 cmd
和 call
。一旦我删除它们,我就会得到预期的结果。但是,我仍然需要进行字符串操作,因为 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)\""
我现在可以从所有三个主要浏览器打开 SSH
和 VNC
链接。