网页如何调用本地exe?

我现在想在网页调用本地exe程序,现在浏览器可以支持这个吗?请教一下懂的同学,如何调取?

根据几位答主与参考网上的答案:通过注册表自定义协议,网页可以调用本地exe.
1.添加注册表
注册表内容如下:

Windows Registry Editor Version 5.00

;CallBSEXEPrint表示自定义的URL Protocol协议名称
[HKEY_CLASSES_ROOT\CallBSEXEPrint]
@="URL: CallBSEXEPrint Protocol Handler"
"URL Protocol"=""

;E:\\localExe\\gy_print.exe 为本地EXE路径
[HKEY_CLASSES_ROOT\CallBSEXEPrint\DefaultIcon]
@="E:\\localExe\\gy_print.exe"

[HKEY_CLASSES_ROOT\CallBSEXEPrint\Shell]

[HKEY_CLASSES_ROOT\CallBSEXEPrint\Shell\Open]

;如果该本地EXE有参数可以在exe后加参数:@="\"E:\\localExe\\gy_print.exe\" %1"
;如果没有参数:@="E:\\localExe\\gy_print.exe "
[HKEY_CLASSES_ROOT\CallBSEXEPrint\Shell\Open\Command]
@="\"E:\\localExe\\gy_print.exe\" %1"

将上面的文字保存文件,并改为.reg结尾的文件,然后双击,会自动注册到注册表。
2.测试网页调用:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body style="display: flex;justify-content:center;">
  <!-- 36为传递给exe的参数 -->
  <a href="CallBSEXEPrint://36">调用exe,并传参</a>
  
  <a href="CallBSEXEPrint://">调用exe,不传参</a>
</body>
</html>

测试结果:
image.png
image.png
但是我想传给exe的参数其实是:E:\localExe\36.xlt,类似下面:
image.png
但是通过协议打开的却是传递的是C盘的参数,路径错误,不知道怎么回事?

阅读 5.3k
4 个回答

不能直接运行 .exe 程序,但是可以通过 URL Scheme 去唤起系统中已经存在的应用。
比如说以前的点击分享到QQ这种实现方式。但是前提条件是电脑上面的应用有在注册表注册对应的 APP Scheme

具体可以参考古早我的这篇笔记,里面有提到过这个方式,也可以直接点击查看微软提供的文档 Registering an Application to a URI Scheme (Windows) | Microsoft Learn

最好是你们内部开发这个PC应用程序的人去配合你,在安装的时候就直接注册好。
不然每一台都去手动改注册表或者提供脚本给他们然后双击运行实在是太麻烦了,而且很多公司配发的电脑都是受控域账户就更加麻烦。

不支持。

试想,可以调本地exe那岂不是非常危险。直接cmd.exe rm /f c:/*?

是不可能实现的。

只能人工的下载你提供的浏览器扩展,通过扩展去调用。搜索PPAPI开发插件吧。

另外可以参考一下NATIVE Messaging

默认肯定不行的.

  1. 可以在本地安装个程序, 监听127.0.0.1上的端口, 代理执行exe程序
  2. 可以试试注册一个特殊的url协议, 比如注册一个 alert:xxxxx 协议, 在浏览器中直接跳转执行exe, 按下面的文档加个注册表项就行. 刚测了一下, 可以执行.

我觉得注册URL协议更简单, 文档地址 https://learn.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa767914(v=vs.85)?redirectedfrom=MSDN

可以用 WASM 技术调用, 不过我没尝试过, 不太确定

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏