UniGui web客户端与本地exe通讯(一)

发布于 2020-06-14  108 次阅读


最近遇到不少需要web调用本地硬件的通讯的需求,这里稍微做一下解释和处理方案。

现在浏览器的安全要求都很高,web无法访问资源(摄像头除外,是公开API)。

但是有些人又需要web与本地硬件(比如读卡器,高拍仪等)进行交互。这个时候要怎么办呢?

activex方案就不说了,优缺点自行百度,这里说一下另一种方案。与本地服务的网络通讯。

使用该方案需要解决两个问题:1.本地exe的启动问题,2.数据交互问题。

关于本地exe启动的方式大约有以下几种

  1. 自动启动,写注册表
  2. 自动启动,shell:startup添加快捷方式
  3. 自动启动,组策略脚本
  4. 自动启动,添加计划任务
  5. 自动启动,做成windows服务(service)
  6. 被动启动,使用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了


谁还不是宝宝了