使用浏览器打开本地的exe程序并传递参数
html文件
其中OpenProgramByBroswer:
为协议名称,名称后面要跟上英文的冒号。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Open Calculator</title>
</head>
<body>
<button onclick="openCalculator()">Open Calculator</button>
<script>
function openCalculator() {
var customProtocol = 'OpenProgramByBroswer:';
var operation = 'add'; // 设置要执行的操作
var operand = '10'; // 设置操作数
// 构建带有参数的URL
var calculatorURL = customProtocol + '//' + '?operation=' + operation + '&operand=' + operand;
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = calculatorURL;
document.body.appendChild(iframe);
setTimeout(function() {
document.body.removeChild(iframe);
}, 500);
}
</script>
</body>
</html>
本地的exe程序代码,使用的C#的控制台程序
using System;
namespace OpenProgramByBroswer
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("hello man");
Console.WriteLine("open by broswer");
if (args.Length == 0)
{
Console.WriteLine("没有传递参数");
}
else
{
Console.WriteLine("传递的参数有:");
for (int i = 0; i < args.Length; i++)
{
Console.WriteLine($"索引是{i}:参数的内容是:{args[i]}");
}
}
Console.ReadKey();
Console.ReadKey();
Console.ReadKey();
}
}
}
两个bat命令
bat文件一:修改注册表.bat
@echo off
SET Mypath=%~dp0
SET LuPath=%Mypath:\=\\%
SET lvPath=%Mypath:\=/%
@echo Windows Registry Editor Version 5.00 >MyApp.reg
@echo [HKEY_CLASSES_ROOT\OpenProgramByBroswer]>>MyApp.reg
@echo @="Open MyApp">>MyApp.reg
@echo "URL Protocol"="">>MyApp.reg
@echo [HKEY_CLASSES_ROOT\OpenProgramByBroswer\shell]>>MyApp.reg
@echo [HKEY_CLASSES_ROOT\OpenProgramByBroswer\shell\open]>>MyApp.reg
@echo [HKEY_CLASSES_ROOT\OpenProgramByBroswer\shell\open\command]>>MyApp.reg
@echo @="\"%LuPath%启动软件.bat\" \"%%1你1好1我1是1传1递1的1参1数\"">>MyApp.reg
regedit /s %Mypath%MyApp.reg
exit
其中OpenProgramByBroswer
要和上面html文件中的定义的协议一致。
1你1好1我1是1传1递1的1参1数
为启动程序会传递的参数,可以将这个删掉,不传递参数
注册表文件二:启动软件.bat
OpenProgramByBroswer
为启动程序的名称
chcp 936
@echo off
SET Mypath=%~dp0
echo %1
start %Mypath%OpenProgramByBroswer %1你2好2我2的2传2递2的2参2数2
%1你2好2我2的2传2递2的2参2数2
为启动的时候传递的参数,可以删掉也可以留着。
创建自解压文件
-
收集exe文件, 和bat命令,将exe放到和exe同级目录下
2. 用win rar创建自解压程序,修改创建出来的程序的名称,并点击设置为
自解压格式压缩文件
。
-
切换到高级,点击
自解压选项
。
-
解压路径可以写成:
../HelloMan
或者其他路径。
-
切换到设置,在解压后运行中输入:
修改注册表.bat
-
创建自解压缩文件
客户端在网页打开文件
-
客户端需要先有创建的自解压文件,然后以后管理员身份运行自解压文件。(不以管理员身份也行,但是有概率不大行,所以建议是以管理员身份运行)
-
设置文件的路径,我这里是默认安装到了C盘的根目录,具体路径需要在在上面设置,也可以让用户自己点击浏览设置路径,路径在哪里不重要,重要的是尽量不要有中文。
-
自解压文件运行完毕
-
在浏览器中打开上面的html文件,直接将html文件拖拽到打开的浏览器页面
- 点击按钮即可打开本地的程序,并且看到传递的参数,
- 参数解析
?operation=add&operand=10你1好1我1是1传1递1的1参1数你2好2我2的2传2递2的2参2数2
?operation=add&operand=10 | 是网页传递的参数 |
你1好1我1是1传1递1的1参1数 | 是注册表传递的参数 |
你2好2我2的2传2递2的2参2数2 | 是启动程序.bat 传递的参数 |
程序卸载
-
打开注册表找到
计算机\HKEY_CLASSES_ROOT\OpenProgramByBroswer
将OpenProgramByBroswer
删除。
-
找到自己在运行exe时候解压的路径将文件也删除。
注意事项
-
修改html文件之后需要将浏览器关闭,然后再打开新的浏览器打开html文件,用于清理缓存
-
不能打开程序,在控制台查看到这样的错误信息,是因为浏览器中规定的协议名和
修改注册表.bat
中规定的协议名称不一致 -
修改bat之后需要讲将注册表删除
Enjoy
资源链接:
https://download.csdn.net/download/GoodCooking/89077930