
Windows URI Schema
起因H1
开发项目起初本身不支持IE的,但是后来对接了单点登录系统。由于单点登录只支持IE,因此希望可以实现IE里打开本系统链接的时候使用Chrome。
思路H1
很对系统的URI Scheme可以实现定义自定义的Scheme前缀,针对该前缀打开特定的应用。 Windows下URI Scheme不仅仅可以打开特定的应用,他可以执行任意的命令
定义URI SchemeH2
在HKEY_CLASSES_ROOT下定义自己scheme的项目,然后添加值URL Protocol = "" 以及shell/open/comand 下定义(Default) = xxx ,xxx为要执行的命令
bash
__HKEY_CLASSES_ROOT__myscheme(Default) = "URL:My Protocol"URL Protocol = ""DefaultIcon(Default) = "myapp.exe,1"shellopencommand(Default) = "notepad" "%1"


实现H2
我们的目标不仅仅是打使用Chrome打开的特定的页面,还需要做一些逻辑处理:
- Chrome的安装路径可能会变化的,需要先查看Chrome执行文件的路径
- 如果没有安装Chrome需要提示用户安装Chrome
- 以上两步没问题,则使用Chrome打开传递的URL
理想情况是在command的值中把逻辑都实现了,但是由于直接在cmd语法实在诡异,一些逻辑在当行命令中无法实现,只能通过调用脚本来实现。
注册表定义H3
Chrome安装后,默认在HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ChromeHTML定义了ChromeHTML 的scheme
bash
Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ChromeHTML]@="Chrome HTML Document""URL Protocol"=""[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ChromeHTML\shell\open\command]@="C:\\\\WINDOWS\\\\SYSTEM32\\CMD.EXE /Q /C C:\\\\che.bat %1"[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ProtocolExecute\ChromeHTML]"WarnOnOpen"=dword:00000000
其中还定义了一个WarnOnOpen 用来关闭打开链接时的警告
脚本定义H3
查找Chrome安装路径
bash
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\Chrome.exe"
最终的脚本
bash
@echo offreg query "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\Chrome.exe" -ve >nul && FOR /F "tokens=*" %%g IN ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\Chrome.exe" -ve') do (SET chrome=%%g)if "%chrome%"=="" (msg %username% 请先安装Chrome浏览器 && @exit)set chrome=%chrome:~18%set uri=%1"%chrome%" %uri:~13%
参考:
评论
新的评论
上一篇
TypeScript Typing总结
有两种类型的 .ts 文件 scripts 其中定义的对象是全局的,只需要在 tsconfig.json 的 include 属性所定义的路径中。scripts文件不能包含任何 import/export 相关语句,否则他会变为modules。 modules 其中定…
下一篇
CMD 中设置环境变量后读取
CMD中默认单行命令设置变量然后读取是无法读取到的,例如 需要启用延迟环境变量扩展并且使用!x!的语法,才能读取到 但是 setlocal 只在脚本生效的。 运行CMD时,指定 /V 参数可以让CMD生效 参考: https://superuser.com/questio…
