1. 背景

        为什么要学习网页调用本地exe?因为项目有一个需求,就是通过页面的按钮,点击调用本地的GUWP(exe软件),使其可以直接登录和打开。

         而exe应用软件,它只能通过cmd进行操作和数据的传递。

2. 通过网络协议进行和exe通信

        通过注册表reg文件,将网络协议(guwp://....)注入到注册表中,通过url的命令,直接启动本地exe软件。比如QQ或者百度网盘等,如果你机器本地已经有exe了,在网页上会直接去把你机器本地的exe给调起来。

2.1. exe软件

        exe软件代码(需要pyrthom依赖)【guwp.exe文件放在附录】

import sys

from tkinter import messagebox


def mmain(args:list):

    if len(args) > 0:

        messagebox.showinfo("提示", "您的参数为:{}".format(args))

    else:

        messagebox.showinfo("提示", "您一个参数都没有。。。")


if __name__ == '__main__':

    # print(sys.argv)

    mmain(sys.argv[1:])

        将python代码打包成exe文件

        打开cmd,输入:pip install pyinstaller,安装打包软件

        进入存放guwp.py的文件夹下(D:\test),通过地址栏输入:cmd

        在guwp.py的文件下打开cmd,输入:pyinstaller -F "guwp.py"

        打包好exe软件,会在dist文件夹下(D:\test\dist)生成exe文件。

        复制到测试文件下(D:\guwp)

        打开cmd,输入:D:\guwp\guwp.exe 11111111111111111

        exe软件执行成功,会出现提示框,并且展示输入的参数内容。

2.2. reg注册文件

        reg注册文件代码【guwp.reg文件放在附录】

        若要执行其他exe文件,只需修改上面的本地路径(D:\\guwp\\guwp.exe)

        若想接收参数,在最后一行的格式定义上加上“%1”,这个字符串代表可以接收参数。

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\guwp]
"URL Protocol"="D:\\guwp\\guwp.exe"
@="guwProtocol"
[HKEY_CLASSES_ROOT\guwp\DefaultIcon]
@="D:\\guwp\\guwp.exe"
[HKEY_CLASSES_ROOT\guwp\shell]
[HKEY_CLASSES_ROOT\guwp\shell\open]
[HKEY_CLASSES_ROOT\guwp\shell\open\command]
@="\"D:\\guwp\\guwp.exe\" %1"

        若想不接收参数,可直接不写

@="\"D:\\guwp\\guwp.exe\"

        网络协议的生效只和注册表的路径名称有关!比如下面路径(HKEY_CLASSES_ROOT\guwp1

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\guwp1]
"URL Protocol"="D:\\guwp\\guwp.exe"
@="guwProtocol"
[HKEY_CLASSES_ROOT\guwp1\DefaultIcon]
@="D:\\guwp\\guwp.exe"
[HKEY_CLASSES_ROOT\guwp1\shell]
[HKEY_CLASSES_ROOT\guwp1\shell\open]
[HKEY_CLASSES_ROOT\guwp1\shell\open\command]
@="\"D:\\guwp\\guwp.exe\" %1"

        点击guwp.reg将URL Protocl注入注册表中

        检查注册表中是否存在guwp的这个网络协议,打开win+R,输入:regedit,打开注册表编辑器。

        测试guwp协议是否注册成功,在URL栏输入:guwp://111111111111

        回车enter,就会出现要打开guwp.exe

        就能够调用本地的exe软件,并且将参数传入到exe软件中。

        这个通过网络协议的参数传递是带有guwp://格式的,和通过cmd启动exe的参数形式不一样。

3. 前端调用cmd

        前端可以通过js代码直接获取本地计算器权限,调用cmd执行代码,这是功能只能在ie浏览器进行,其他浏览器不支持。

        JAVAscript执行cmd代码

var  cmd = new ActiveXObject("WScript.Shell");
cmd.run("D:\\guwp\\guwp.exe 11111111111111111");");

        执行这段代码,需要打开ie浏览器的权限功能,重新启动ie。

        打开ie浏览器的开发工具,进入控制台,输入js代码。

        点击运行,会出现执行guwp文件提示。

        点击允许,这就是直接执行cmd命名,调用gwup.exe。

        注意:这个功能方法虽然可以通过前端调用cmd,执行exe软件,但是有个严重的安全问题,就是网页可以通过cmd获取到你的计算权限,如果他人要是执行文件清除等命令,后果不堪设想。所以一般禁止使用这个功能,使用网络协议调用本地的exe软件,才是正确的方法。

4. 附件

4.1. 代码附带文件

        reg注册文件(去掉.txt),exe软件代码(去掉.txt)

        【鄙视不支持txt文件上传】

        链接:https://pan.baidu.com/s/1xSuObg5qf1_oeEMhwxommQ 
        提取码:vkju

4.2. 素材来源

  1. 浏览器调用本地exe(应用程序)方法--链接
  2. 网页:如何调用本地EXE文件--链接
  3. python中用pyinstaller工具打包exe--链接
  4. JAVAscript怎么执行cmd命令--链接

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐