自定义URL协议多命令注册异常:所有调用均启动写字板
问题原因及解决方法
你的注册表配置错误源于对自定义协议动词触发逻辑的误解,导致所有调用都会启动写字板:
mycustomprot://launch这类写法不会触发shell分支下的launch动词,而是把整个URL作为参数%1传给协议的默认处理命令。- 当
[HKEY_CLASSES_ROOT\mycustomprot\shell]未设置默认值时,Windows会自动选择字母顺序最靠前的动词作为默认动作,你的配置里edit(以e开头)排在launch和run之前,所以所有调用都会执行edit对应的写字板命令。
解决方法一:解析URL路径区分动作(适合直接输入URL调用的场景)
删除shell下的edit、launch、run子项,改用脚本解析URL中的指令,再执行对应程序:
- 修改注册表为:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\mycustomprot] @="URL:mycustomprot Protocol" "URL Protocol"="" [HKEY_CLASSES_ROOT\mycustomprot\DefaultIcon] @="\"C:\\path\\to\\icon.ico\"" [HKEY_CLASSES_ROOT\mycustomprot\shell] @="open" [HKEY_CLASSES_ROOT\mycustomprot\shell\open\command] @="\"C:\\path\\to\\prot_handler.bat\" \"%1\""
- 在指定路径创建
prot_handler.bat脚本,内容如下:
@echo off set "url=%~1" set "action=%url:*://=%" if "%action%"=="launch" start "" "%windir%\system32\SnippingTool.exe" if "%action%"=="run" start "" "C:\Program Files\AnyDesk\AnyDesk.exe" if "%action%"=="edit" start "" "C:\Program Files\Windows NT\Accessories\wordpad.exe"
解决方法二:设置默认动词(适合右键选择动作的场景)
如果希望保留多个动词选项,给shell项设置默认值,指定默认执行的动作:
[HKEY_CLASSES_ROOT\mycustomprot\shell] @="launch"
注:这种方式下,直接输入URL只会执行默认动词的命令,无法通过URL路径切换动作,只能在右键点击协议链接时选择其他动词。
内容的提问来源于stack exchange,提问作者alwaysVBNET
相关产品推荐
相关产品推荐

