You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过.bat或.reg文件在HKEY_CLASSES_ROOT中添加注册表项,使Web应用可调用第三方桌面程序

如何通过.bat或.reg文件在HKEY_CLASSES_ROOT中添加注册表项,使Web应用可调用第三方桌面程序

我完全明白你的需求——想让Web应用里的链接直接唤起用户本地的第三方桌面程序,而且得用脚本按需配置,不用手动去改注册表对吧?你之前试的脚本有点小问题,我来给你调整并说明正确的实现方式,分两种方案供你选择:

一、使用BAT脚本自动配置

首先纠正你之前脚本的几个问题:你用了带://test的完整URL作为注册表项名称,这是错误的,URL协议只需要协议名(比如myapp);另外assocftype是用来关联文件扩展名的,对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://test
  • app_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

火山引擎 最新活动