背景:如果在用户本地电脑上有个 exe可执行文件,不能修改这个可执行文件本身,想在浏览器中通过点击按钮,调用这个exe文件,Web前端可以做到么?

由于浏览器的安全限制,是不允许直接调用exe文件的。但是有时候非要实现这种需求,因此只能用一些折中的方法。

在这里主要使用注册表协议法

新建一个注册表文件,里面描述一个新协议,这个协议的动作是:当访问这个协议时,打开一个可执行文件。

  • 前端点击时,访问这个协议的链接,就会调用可执行文件。

比如我们需要打开的文件位置在:C:/needOpen.exe

做新设立一个协议叫做newopenprotocol,则编写注册表文件如下:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\newopenprotocol]
@="newopenprotocol Protocol"
"URL Protocol"="C:\\needOpen.exe"
[HKEY_CLASSES_ROOT\newopenprotocol\DefaultIcon]
@="cmd.exe,1"
[HKEY_CLASSES_ROOT\newopenprotocol\shell]
[HKEY_CLASSES_ROOT\newopenprotocol\shell\open]
[HKEY_CLASSES_ROOT\newopenprotocol\shell\open\command]
@=""C:\\needOpen.exe""
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

前端代码demo

url = 'newopenprotocol://'
window.location.href = url;  // 当前页面打开
window.open(url, '_blank');  // 新页面打开
  • 1.
  • 2.
  • 3.

如果需要让其他人也可以使用,可以使用bat脚本生成reg文件,自动注册脚本,将脚本文件放到exe文件夹下,右键点击bat文件, 以管理员身份运行 即可

点击完会在当前文件夹生成newopenprotocol.reg 文件

如何在浏览器启动一个已经安装的桌面程序_exe

:: 获取当前目录
set "CURRENT_DIR=%~dp0"
:: set "DOUBLE_SLASHED_DIR=%CURRENT_DIR:~0,-1%"
set "DOUBLE_SLASHED_DIR=%CURRENT_DIR:=\%"
echo path %DOUBLE_SLASHED_DIR%
:: 生成.reg文件
echo Windows Registry Editor Version 5.00>newopenprotocol.reg
echo.>>newopenprotocol.reg
echo [HKEY_CLASSES_ROOT\newopenprotocol]>>newopenprotocol.reg
echo @="URL:newopenprotocol Protocol">>newopenprotocol.reg
echo "URL Protocol"=""%DOUBLE_SLASHED_DIR%needOpen.exe"">>newopenprotocol.reg
echo.>>newopenprotocol.reg
echo [HKEY_CLASSES_ROOT\newopenprotocol\DefaultIcon]>>newopenprotocol.reg
echo @="cmd.exe,1">>newopenprotocol.reg
echo.>>newopenprotocol.reg
echo [HKEY_CLASSES_ROOT\newopenprotocol\shell]>>newopenprotocol.reg
echo.>>newopenprotocol.reg
echo [HKEY_CLASSES_ROOT\newopenprotocol\shell\open]>>newopenprotocol.reg
echo.>>newopenprotocol.reg
echo [HKEY_CLASSES_ROOT\newopenprotocol\shell\open\command]>>newopenprotocol.reg
echo @=""%DOUBLE_SLASHED_DIR%needOpen.exe"">>newopenprotocol.reg
:: 执行reg文件
regedit /s newopenprotocol.reg
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

如何在浏览器启动一个已经安装的桌面程序_浏览器_02