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客户端相关推荐

  1. Web端打开本地可执行的exe程序

    Web端打开本地可执行的exe程序 reg文件是注册表文件. Web启动Colors.reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_RO ...

  2. Web端调用本地打印机-Java实现

    实现思路: 用Java调用本地打印机实现功能,将java程序打包成exe可执行文件,在本地注册表中新增URL协议,最后web端通过该协议实现启动本地exe程序进行打印 实现过程: 1.下载32位TSC ...

  3. C#进行Visio二次开发之Web端启动绘图客户端并登录

    有这样的需求,一个系统,包含Web端的后台和Winform的绘图客户端程序,用户需要在Web端能够启动绘图客户端,并且不需要重新登录(因为已经登录了Web端了). 那么在IE的Web端,如何启动Win ...

  4. Asp.Net 之 通过调用 WScript.Shell 启动本地 exe 程序时产生“ automation服务器不能创建对象 ”的错误...

    我们经常需要通过生成 ActiveXObject("WScript.Shell"); 来调用某一exe文件. 设置网页打印的页眉页脚为空: var HKEY_Root,HKEY_P ...

  5. web端读取本地excel表数据

    听说发文有积分,我就来试试了,请大家不要喷我,我只是个孩子. 使用的js插件是js-xlsx,下载地址:https://github.com/SheetJS/js-xlsx,大家可以自行下载. var ...

  6. Web端调用本地打印机-JS实现

    大概步骤: 1.安装打印机驱动,连接打印机 2.下载并部署TSCActiveX,下载地址 https://download.csdn.net/download/u010188178/10642451 ...

  7. Web页面调用本地客户端程序并传参

    好久没跟新博客了,今天跟新2019年的第一篇博客,最近在做项目,需求就是Web页面调用本地客户端程序并传参,传参是为了避免客户端再次输入账号密码,直接跳过登录. 翻了不少资料,总的来说好像都要操作注册 ...

  8. 网页(浏览器)调用本地exe应用软件

    1. 背景 为什么要学习网页调用本地exe?因为项目有一个需求,就是通过页面的按钮,点击调用本地的GUWP(exe软件),使其可以直接登录和打开. 而exe应用软件,它只能通过cmd进行操作和数据的传 ...

  9. 启动go服务_内网穿透工具 FRP公网服务端、内网客户端快速配置文件说明

    内网穿透工具 FRP 公网服务端.内网客户端 frps.ini .frpc.ini 配置文件常用设置展示及说明 公网服务端 frps.ini 配置文件常用设置 公网服务端配置文件:frps.ini [ ...

最新文章

  1. matlab jdbc mysql_Matlab连接MySQL(ODBC及JDBC驱动)
  2. 分区表在安装系统(MBR)丢失或损坏
  3. pytorch微调bert_香侬读 | RoBERT: 没错,我就是能更强——更大数据规模和仔细调参下的最优BERT
  4. glide 显示图片慢_做个看图片的App玩玩_第一篇
  5. [react] useEffect和useLayoutEffect有什么区别?
  6. tomcat是否有必要配置环境变量(摘)
  7. Java并发编程实战~不安全的单例
  8. 信息学奥赛C++语言: 趣味整数1(自守数)
  9. 都说人工智能入门难?但80%的人都错了……
  10. 云数据的安全性不容忽视
  11. Nik Collection 4 for Mac可独立使用的ps滤镜工具
  12. vue组件中传值遇到的一些问题
  13. 产学研专题数据(区域、企业、地级市创新指标及研发、RD投入)
  14. Linux安装dos环境,Ubuntu安装dos2unix工具
  15. 冬奥会开幕式震撼刷屏,这些黑科技立了大功!
  16. 前端应用 - 汉字笔顺书写演示带拼音及发音
  17. Required method destroyItem was not overridden
  18. appium之微信公众号自动化测试实战
  19. NVIDIA Jetson TX2模块参数
  20. 基于SSM+Mysql的房屋租赁管理系统

热门文章

  1. JavaScript复制内容到剪切板
  2. FTP架设及本地分享局域保姆级教程
  3. C++基础知识的总结(主要针对面试)
  4. 如何安装java软件_java您的计算机已经安装了此软件
  5. 王力宏《依然爱你 》歌词
  6. Appium抓取app数据
  7. Ubuntu + CUDA 8.0 + GTX960M
  8. (22)LED灯(外部)
  9. 写一个自己的shell
  10. css毛玻璃效果/el-progress进度条渐变/axios的基本使用/跨域配置/关闭eslint验证