Win10下gpedit注册自定义协议调用VBS失败但CMD运行正常怎么办
问题背景
运行环境为Win10系统,编写用于启动IE浏览器的VBS脚本openIE.vbs,脚本代码如下:
Set ws = CreateObject("Wscript.Shell") ws.run "cmd /c start """" /max ""C:\\Program Files\\Internet Explorer\\iexplore.exe"" """+"https://www.google.com"+"""",vbhide
在CMD窗口中直接执行以下命令调用脚本时,脚本可正常运行:
"C:\Program Files\chromeOpenIE\openIE.vbs"
通过gpedit操作在注册表中注册自定义URL协议chromeOpenIE,注册表配置内容如下:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\chromeOpenIE] @="IE" "URL Protocol"="" [HKEY_CLASSES_ROOT\chromeOpenIE\DefaultIcon] @="iexplore.exe,1" [HKEY_CLASSES_ROOT\chromeOpenIE\shell] [HKEY_CLASSES_ROOT\chromeOpenIE\shell\open] [HKEY_CLASSES_ROOT\chromeOpenIE\shell\open\command] @="\"C:\\Program Files\\chromeOpenIE\\openIE.vbs\""
注册完成后,通过访问地址chromeOpenIE://触发脚本执行时操作失败。
故障原因
- 关联程序配置错误:
.vbs属于脚本文件,并非系统可直接执行的PE程序,自定义URL协议触发时不会自动调用脚本宿主解析执行,直接填写VBS文件路径无法正常启动脚本。 - 注册表配置格式错误:原配置中路径转义逻辑混乱,多余的转义字符导致系统无法识别正确的文件路径,同时缺少参数占位符,协议触发时传入的参数无法正常传递。
注:CMD中直接执行VBS路径可正常运行,是因为系统已为.vbs后缀配置了默认关联至wscript脚本宿主,该默认关联逻辑在自定义URL协议调用场景下不生效。
修复方法
- 修正注册表command项配置:明确指定wscript.exe作为脚本执行宿主,补全正确的程序路径、脚本路径和参数占位符
%1。修正后[HKEY_CLASSES_ROOT\chromeOpenIE\shell\open\command]项的默认值为:
对应的完整可用reg文件内容如下:"C:\Windows\System32\wscript.exe" "C:\Program Files\chromeOpenIE\openIE.vbs" %1Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\chromeOpenIE] @="IE" "URL Protocol"="" [HKEY_CLASSES_ROOT\chromeOpenIE\DefaultIcon] @="iexplore.exe,1" [HKEY_CLASSES_ROOT\chromeOpenIE\shell] [HKEY_CLASSES_ROOT\chromeOpenIE\shell\open] [HKEY_CLASSES_ROOT\chromeOpenIE\shell\open\command] @="\"C:\\Windows\\System32\\wscript.exe\" \"C:\\Program Files\\chromeOpenIE\\openIE.vbs\" %1" - (可选优化)原VBS脚本中路径双反斜杠属于冗余写法,VBS字符串内路径使用单反斜杠即可,优化后兼容性更强,优化后的脚本代码:
Set ws = CreateObject("Wscript.Shell") ws.run "cmd /c start """" /max ""C:\Program Files\Internet Explorer\iexplore.exe"" ""https://www.google.com""",vbhide - 导入修正后的注册表文件,重启资源管理器或注销重新登录系统后,访问
chromeOpenIE://即可正常触发脚本启动IE。
内容的提问来源于stack exchange,提问作者JokerSora
相关产品推荐
相关产品推荐

