web端启动本地exe客户端
1. 背景
项目中常用浏览器有Chrome和IE,对于web端启动本地exe客户端。早期,Chrome和IE都提供了ActiveXObject对象,以它的exec接口,只需传入本地exe客户端所在安装路径为参数便可启动客户端。现今,Chrome摒弃了该方式,IE仍有保留。
2. 案例使用场景
本案例主要实现兼容当前Chrome和IE浏览器,web端启动本地exe客户端的一种实现方案。
3. 案例实现
3.1 原理
在注册表中注入自定义的协议,然后web端通过该协议调用启动客户端。
3.2 批处理生成注册表文件
以下批处理示例文件,实现生成打开记事本notepad.exe所需注册表文件,记事本安装目录为“C:\Windows\system32”,批处理文件命令行内容如下:
OpenClient.bat文件:
1.setlocal enabledelayedexpansion
2.rem 如果注册表文件存在则删除
3.del OpenClient.reg
4.set str1=^\
5.set str2=^\^\
6.for /f "tokens=*" %%i in ("%~dp0") do (
7.set regs=%%i
8.set regs=!regs:%str1%=%str2%!
9.
10.echo Windows Registry Editor Version 5.00>>OpenClient.reg
11.echo [HKEY_CLASSES_ROOT\OpenClient]>>OpenClient.reg
12.echo @="OpenClient Protocol">>OpenClient.reg
13.echo "URL Protocol"="">>OpenClient.reg
14.
15.echo [HKEY_CLASSES_ROOT\OpenClient\DefaultIcon]>>OpenClient.reg
16.echo [HKEY_CLASSES_ROOT\OpenClient\shell]>>OpenClient.reg
17.echo [HKEY_CLASSES_ROOT\OpenClient\shell\open]>>OpenClient.reg
18.echo [HKEY_CLASSES_ROOT\OpenClient\shell\open\command]>>OpenClient.reg
19.rem 客户端exe文件具体所在目录
20.echo @="!regs!notepad.exe">>OpenClient.reg
21.)
批处理关键命令解释:
命令 | 解释 |
---|---|
rem | 注释 |
echo 测试>>test.txt | 把“测试”写入到文件test.txt中 |
%~dp0 | 获取当前批处理文件所在的目录 |
for循环 | 把获取的Window下当前路径中的”\”全部替换成”\\” |
!regs! | 通过for循环处理过后的exe所在路径 |
3.3 注册自定义协议
双击运行批处理文件之后生成的注册文件内容如下:
OpenClient.reg文件:
1.Windows Registry Editor Version 5.00
2.[HKEY_CLASSES_ROOT\OpenClient]
3.@="OpenClient Protocol"
4."URL Protocol"=""
5.[HKEY_CLASSES_ROOT\OpenClient\DefaultIcon]
6.[HKEY_CLASSES_ROOT\OpenClient\shell]
7.[HKEY_CLASSES_ROOT\OpenClient\shell\open]
8.[HKEY_CLASSES_ROOT\OpenClient\shell\open\command]
9.@=" C:\\Windows\\system32\\notepad.exe"
生成注册表文件内容说明:
命令 | 解释 |
---|---|
Windows Registry Editor Version 5.00 | 注册表的版本 |
@=” OpenClient Protocol” | 指定对应协议类型为OpenClient |
Command | 要执行的命令 |
@=” C:\\Windows\\system32\\notepad.exe” | 命令值 |
双击运行生成的OpenClient.reg文件,把生成的值和项添加到注册表中
3.4 web调用启动客户端
成功把自定义的协议写入到注册表之后,便可以在web端通过链接的方式,访问启动exe客户端:
OpenClient.html文件:
1.<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2.<html xmlns="http://www.w3.org/1999/xhtml">
3.<head>
4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
5.</head>
6.<body>
7.<div>
8. <a href="OpenClient://">
9. 启动客户端
10. </a>
11.</div>
12.</body>
13.</html>
双击运行OpenClient.html文件,点击“启动客户端” 后效果图如下,选中“始终在关联应用中打开这些类型的链接”,再点击“打开记事本”便可。
3.5 提示
有的Chrome浏览器版本,没有选择“始终在关联应用中打开这些类型的链接”,每次打开都提示是否打开,该问题可通过更换浏览器版本解决。
4. 总结
在web端启动本地安装的exe客户端,以上方案可以满足当前主流的Chrome和IE浏览器。由于第三方客户端安装目录不定,所以当安装目录变更时,需要再到exe文件所在目录下重新注册自定义协议,确保协议中command的命令值更新,能够找到需要启动的客户端。
世界这么大,我只是一个永远需要不断学习和思考的小学生,感谢所有的挫折和困难。
如果文章中一个点或者一句话对您有一点点帮助或者启发,请您点赞、评论或收藏一下,小伙伴们的智慧【三连】是对黔仔我最大的鼓励,谢谢。
web端启动本地exe客户端相关推荐
- Web端打开本地可执行的exe程序
Web端打开本地可执行的exe程序 reg文件是注册表文件. Web启动Colors.reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_RO ...
- Web端调用本地打印机-Java实现
实现思路: 用Java调用本地打印机实现功能,将java程序打包成exe可执行文件,在本地注册表中新增URL协议,最后web端通过该协议实现启动本地exe程序进行打印 实现过程: 1.下载32位TSC ...
- C#进行Visio二次开发之Web端启动绘图客户端并登录
有这样的需求,一个系统,包含Web端的后台和Winform的绘图客户端程序,用户需要在Web端能够启动绘图客户端,并且不需要重新登录(因为已经登录了Web端了). 那么在IE的Web端,如何启动Win ...
- Asp.Net 之 通过调用 WScript.Shell 启动本地 exe 程序时产生“ automation服务器不能创建对象 ”的错误...
我们经常需要通过生成 ActiveXObject("WScript.Shell"); 来调用某一exe文件. 设置网页打印的页眉页脚为空: var HKEY_Root,HKEY_P ...
- web端读取本地excel表数据
听说发文有积分,我就来试试了,请大家不要喷我,我只是个孩子. 使用的js插件是js-xlsx,下载地址:https://github.com/SheetJS/js-xlsx,大家可以自行下载. var ...
- Web端调用本地打印机-JS实现
大概步骤: 1.安装打印机驱动,连接打印机 2.下载并部署TSCActiveX,下载地址 https://download.csdn.net/download/u010188178/10642451 ...
- Web页面调用本地客户端程序并传参
好久没跟新博客了,今天跟新2019年的第一篇博客,最近在做项目,需求就是Web页面调用本地客户端程序并传参,传参是为了避免客户端再次输入账号密码,直接跳过登录. 翻了不少资料,总的来说好像都要操作注册 ...
- 网页(浏览器)调用本地exe应用软件
1. 背景 为什么要学习网页调用本地exe?因为项目有一个需求,就是通过页面的按钮,点击调用本地的GUWP(exe软件),使其可以直接登录和打开. 而exe应用软件,它只能通过cmd进行操作和数据的传 ...
- 启动go服务_内网穿透工具 FRP公网服务端、内网客户端快速配置文件说明
内网穿透工具 FRP 公网服务端.内网客户端 frps.ini .frpc.ini 配置文件常用设置展示及说明 公网服务端 frps.ini 配置文件常用设置 公网服务端配置文件:frps.ini [ ...
最新文章
- matlab jdbc mysql_Matlab连接MySQL(ODBC及JDBC驱动)
- 分区表在安装系统(MBR)丢失或损坏
- pytorch微调bert_香侬读 | RoBERT: 没错,我就是能更强——更大数据规模和仔细调参下的最优BERT
- glide 显示图片慢_做个看图片的App玩玩_第一篇
- [react] useEffect和useLayoutEffect有什么区别?
- tomcat是否有必要配置环境变量(摘)
- Java并发编程实战~不安全的单例
- 信息学奥赛C++语言: 趣味整数1(自守数)
- 都说人工智能入门难?但80%的人都错了……
- 云数据的安全性不容忽视
- Nik Collection 4 for Mac可独立使用的ps滤镜工具
- vue组件中传值遇到的一些问题
- 产学研专题数据(区域、企业、地级市创新指标及研发、RD投入)
- Linux安装dos环境,Ubuntu安装dos2unix工具
- 冬奥会开幕式震撼刷屏,这些黑科技立了大功!
- 前端应用 - 汉字笔顺书写演示带拼音及发音
- Required method destroyItem was not overridden
- appium之微信公众号自动化测试实战
- NVIDIA Jetson TX2模块参数
- 基于SSM+Mysql的房屋租赁管理系统