如何通过.bat或.reg文件在HKEY_CLASSES_ROOT中添加注册表项,使Web应用可调用第三方桌面程序
如何通过.bat或.reg文件在HKEY_CLASSES_ROOT中添加注册表项,使Web应用可调用第三方桌面程序
我完全明白你的需求——想让Web应用里的链接直接唤起用户本地的第三方桌面程序,而且得用脚本按需配置,不用手动去改注册表对吧?你之前试的脚本有点小问题,我来给你调整并说明正确的实现方式,分两种方案供你选择:
一、使用BAT脚本自动配置
首先纠正你之前脚本的几个问题:你用了带://test的完整URL作为注册表项名称,这是错误的,URL协议只需要协议名(比如myapp);另外assoc和ftype是用来关联文件扩展名的,对URL协议来说完全没必要,反而会干扰配置。
下面是正确的BAT脚本,你只需要替换对应的参数即可:
@echo off setlocal enabledelayedexpansion :: 这里替换成你的自定义URL协议名(比如myapp,对应Web里的myapp://xxx链接) set "protocol_name=myapp" :: 这里替换成你要启动的桌面程序的绝对路径 set "app_path=C:\app_path\app.exe" :: 1. 注册URL协议的基础标识 reg add "HKCR\%protocol_name%" /ve /t REG_SZ /d "URL:My App Protocol" /f reg add "HKCR\%protocol_name%" /v "URL Protocol" /t REG_SZ /d "" /f :: 2. 设置点击链接时的启动命令,把URL参数传递给程序 reg add "HKCR\%protocol_name%\shell\open\command" /ve /t REG_SZ /d "\"%app_path%\" \"%%1\"" /f echo 自定义URL协议 %protocol_name% 配置完成! pause
脚本说明:
@echo off:关闭命令行的多余输出,让脚本运行更干净protocol_name:就是你Web链接里用的协议前缀,比如设置成myapp,那Web里的链接就是myapp://testapp_path:你的第三方程序的绝对路径,注意如果路径里有空格,脚本里的引号已经帮你处理了- 两个
reg add命令:第一个是告诉系统这是一个URL协议,第二个是设置触发协议时要执行的命令,%%1会把点击的完整URL(比如myapp://test)传递给你的程序
二、使用REG文件导入配置
如果你觉得BAT脚本太繁琐,也可以直接写一个REG文件,用户双击就能完成配置(需要管理员权限):
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\myapp] @="URL:My App Protocol" "URL Protocol"="" [HKEY_CLASSES_ROOT\myapp\shell] [HKEY_CLASSES_ROOT\myapp\shell\open] [HKEY_CLASSES_ROOT\myapp\shell\open\command] @="\"C:\\app_path\\app.exe\" \"%1\""
使用说明:
- 把
myapp替换成你的协议名 - 把
C:\\app_path\\app.exe替换成实际的程序路径(注意REG文件里路径要用双反斜杠\\) - 保存为
.reg后缀的文件,右键选择“合并”,确认后即可完成注册
关键注意事项
- 不管用哪种方式,都需要以管理员身份运行,因为修改
HKEY_CLASSES_ROOT需要系统权限 - 测试的时候,可以在浏览器地址栏输入
myapp://test,或者在Web页面里加一个<a href="myapp://test">打开我的程序</a>的链接,点击后就能唤起你的桌面程序 - 如果你的程序需要处理链接里的参数(比如
myapp://test?id=123),你的桌面程序要能读取传递过来的%1参数(也就是完整的URL),然后自行解析里面的内容
备注:内容来源于stack exchange,提问作者Douglas Vicentini




