WEB项目通过浏览器打开windows上的exe应用

一、背景

最近有一个新需求,是通过浏览器打开本地exe应用。因为我们公司的产品是以exe为主,用web项目管理数据,接到的新项目是web为企业门户需要集成所有的应用,前端通过按钮点击打开本地exe应用。一开始还有点懵,因为我做B/S很多年,但是从来没考虑或尝试从浏览器打开本地exe,但是技术呢,肯定是可以实现的,因为可以参考百度网盘,通过浏览器打开以后,下载东西,如果文件过大,会提示使用本地客户端下载,浏览器就会弹出对应窗口用来打开exe应用。所以技术路线肯定没问题,剩下的就是看怎么实现了。还是比较简单的,毕竟就是把双击的操作使用脚本代码来实现。

二、技术探索

1.单机应用考虑

一开始我一直以为是在本机使用的,所以很简单啊,本机启动浏览器,然后点击按钮,通过接口调用后端方法,后端方法实现打开本地exe应用即可。
在这里插入图片描述
接下来只要完成后端的功能接口即可,我先找了个demo来尝试通过java打开本地exe。实现有多种方式,代码呢也非常简单,几行代码即可。

以下也给出了2种实现方式:

方式一:

代码就2行

public static void main(String[] args) throws IOException {
        String exePath = "C:\\Program Files\\Tencent\\QQNT\\QQ.exe";
        Runtime.getRuntime().exec(exePath);
    }

上面的地址要填你要打开应用的地址,如下图:
在这里插入图片描述
运行main方法就能打开QQ
在这里插入图片描述

方式二:

public static void main(String[] args){
        String exePath = "C:\\Program Files\\Tencent\\QQNT\\QQ.exe";
        BufferedReader br = null;
        BufferedReader brError;
        String line = null;
        try {
            Process p = new ProcessBuilder(exePath).start();
            br = new BufferedReader(new InputStreamReader(p.getInputStream()));
            brError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
            while ((line = br.readLine()) != null || (line = brError.readLine()) != null) {
                //输出exe输出的信息以及错误信息
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

运行程序,也可以打开。
在这里插入图片描述

至此单机版的实现。先说结论,这个不能够使用,因为存在严重的问题。我们的web门户系统是放在服务器上的(是公用的服务),客户端是有多个的,客户想要实现的是,从A电脑访问门户系统,点击打开exe应用按钮,就打开A电脑的exe。从B电脑访问门户系统,点击打开exe应用按钮,就打开B电脑的exe。。。其他也同理。所以单机版的就不能实现,他打开的永远是本机的exe应用,服务器首先不是windows系统的,其次服务器上也没装exe应用。放到服务器上连最基本的都不能实现。

2.服务器客户端考虑

经过分析,我觉得还是自己想的太简单了。如果要通过服务器,去打开本机的exe应用,那我想本机一定得有一个守护线程,并且这个服务是实时在线的,可能随本机启动而自启动,永远在线,等待服务器的调用,通过门户系统点击了打开本地exe按钮后,浏览器发送请求到守护线程的服务,守护线程去调用打开exe的方法。调起肯定是从浏览器发起了,协议选择了Websocket。至于为什么不选择http,是因为从服务器调用本机,服务器需要实时获取本机地址,并且拼接请求地址,比较复杂。Websocket使用协议不同,固定地址为本机(127.0.0.1)即可。点击打开exe按钮时建立连接,并发送调起exe应用的请求。
在这里插入图片描述
这种方法应该是可以实现的,但是再我们开始做的时候,又找到了更简单的方法。

3.注册表修改探索

新建文件,修改后缀为reg,使用NotPad++打开编辑。

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\TestQ]
@="TestQProtocol"
"URL Protocol"="\"C:\\Program Files\\Tencent\\QQNT\\QQ.exe\""
[HKEY_CLASSES_ROOT\TestQ\shell] 
[HKEY_CLASSES_ROOT\TestQ\shell\open] 
[HKEY_CLASSES_ROOT\TestQ\shell\open\command]
@="\"C:\\Program Files\\Tencent\\QQNT\\QQ.exe\""

双击运行即可。注意运行reg文件的时候,千万不用放到含中文路径的目录下!同时编码格式要用ANSI。
在这里插入图片描述
编码可以在notPad++中调整。
在这里插入图片描述
添加完成后,可以按win+R 输入 regedit 查看注册表信息。通过以上路径可以找到自己添加的。如果没生效可以重启电脑尝试。
在这里插入图片描述
然后打开浏览器输入:

testq://

在这里插入图片描述
至此通过浏览器打开客户端的问题解决。

建议:可以在本公司的exe应用程序安装的时候将注册表信息一块添加到电脑上。到时候直接浏览器访问即可。

三、最后

通过本次需求,学到了浏览器打开exe应用的技术,收益颇多。大家有类似需求的快试试吧。

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值