UniGui web客户端与本地exe通讯(一)
最近遇到不少需要web调用本地硬件的通讯的需求,这里稍微做一下解释和处理方案。
现在浏览器的安全要求都很高,web无法访问资源(摄像头除外,是公开API)。
但是有些人又需要web与本地硬件(比如读卡器,高拍仪等)进行交互。这个时候要怎么办呢?
activex方案就不说了,优缺点自行百度,这里说一下另一种方案。与本地服务的网络通讯。
使用该方案需要解决两个问题:1.本地exe的启动问题,2.数据交互问题。
关于本地exe启动的方式大约有以下几种
- 自动启动,写注册表
- 自动启动,shell:startup添加快捷方式
- 自动启动,组策略脚本
- 自动启动,添加计划任务
- 自动启动,做成windows服务(service)
- 被动启动,使用URLProtocol协议唤醒
前4种就不详细说明了,百度有很多详细文章,提示一点前两种容易被干掉,像什么X60,安全X家,X山等,在你添加信息的时候就会提醒并直接杀掉,第3种在win7/10 home版本中没有组策略。第4,5种方法属于相对比较靠谱些的方法。
重点说一下第6种,什么是URLProtocol协议,其实很多人都用过,比如点击网页上的迅雷下载,就会启动迅雷,然后添加下载任务。点击网页上QQ咨询就会打开QQ的聊天对话框等,这些就是URLProtocol协议。
具体做法:添加注册表
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\\myapp]@="URL:myapp Protocol""URL Protocol"="" [HKEY_CLASSES_ROOT\\myapp\\DefaultIcon]@="C:\\\\PyInstaller\\\\UrlProtocol\\\\dist\\\\UrlProtocol.exe" [HKEY_CLASSES_ROOT\\myapp\\shell] [HKEY_CLASSES_ROOT\\myapp\\shell\\open] [HKEY_CLASSES_ROOT\\myapp\\shell\\open\\command]@="C:\\\\PyInstaller\\\\UrlProtocol\\\\dist\\\\UrlProtocol.exe \\"%1\\""
这样在浏览器里打开网址myapp:// 就可以启动注册的exe了