1.IE浏览器
taskkill方法是禁止打开多个exe,只能打开一个,如果打开多个,会首先把之前的都关闭又重新打开。
主要方法是var command = "taskkill /f /t /im 360Safe.exe " ;
只是想打开本地exe的话就是jsRunExec方法。
注意如下代码块的空格,如下方法是传参的写法,传参前要加空格。
function taskkill() {
var command = "taskkill /f /t /im WeChat.exe " ;
window.oldOnError = window.onerror;
window._command = command;
window.onerror = function (err) {
if (err.indexOf('utomation') != -1) {
alert('请更改你的IE的安全级别:开始->设置->控制面板->Internet选项->安全->自定义级别->对没有标记为安全的ActiveX控件进行初始化和脚本运行->启用。命令:' + window._command);
return true;
} else
return false;
};
var wsh = new ActiveXObject('WScript.Shell');
if (wsh) wsh.Run(command);
wsh = null;
window.onerror = window.oldOnError;
}
function jsRunExec(url) {
taskkill();
setTimeout(function () {
var command = "D:\WeChat\\WeChat.exe " +url;
window.oldOnError = window.onerror;
window._command = command;
window.onerror = function (err) {
if (err.indexOf('utomation') != -1) {
alert('请更改你的IE的安全级别:开始->设置->控制面板->Internet选项->安全->自定义级别->对没有标记为安全的ActiveX控件进行初始化和脚本运行->启用。命令:' + window._command);
return true;
} else
return false;
};
var wsh = new ActiveXObject('WScript.Shell');
if (wsh) wsh.Run(command);
wsh = null;
window.onerror = window.oldOnError;
},700);
}
因为ActiveX控件为IE浏览器的特有对象,因此该方法仅允许在IE浏览器下使用,且使用前必须配置IE浏览器的安全策略(没有设置会进行弹框提示)。
2.谷歌浏览器
如在Chrome中用如上方法调用,会打不开exe而会Console报错ActiveXObject is not defined,这是因为Chrome出于安全性考虑已经禁止直接调用客户端程序,去除了内置对象ActiveXObject,在Chrome下解决该问题思路,可以选择使用“url protocol handler"私有协议,widows提供了用户可自定义的协议,使用私有协议首先需要到注册表下添加协议的属性(类型、key、值),通过已定义的私有协议就可以调用本地客户端。
因为浏览器的安全策略问题,除了IE外的其他浏览器都无法打开本地exe文件,因为采用将exe路径写入注册表的方式打开。
使用超链接的方式打开一个本地exe文件
- 添加注册表
通过txt文本写,写完后更改后缀名:myprotocol.reg
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\myprotocol]
@="myprotocol Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\myprotocol\DefaultIcon]
@="D:\WeChat\\WeChat.exe"
[HKEY_CLASSES_ROOT\myprotocol\shell]
@=""
[HKEY_CLASSES_ROOT\myprotocol\shell\open]
@=""
[HKEY_CLASSES_ROOT\myprotocol\shell\open\command]
@="\"D:\WeChat\\WeChat.exe\" "
- 超链接
<a href="myprotocol"://">点开exe</a>
需要后面传参的话直接在后面跟参数就可以了,例如
<a href="myprotocol"://12345">点开exe</a>
如果要禁止打开多个exe,需要再写一个注册表相当于cmd命令,因为谷歌浏览器安全性较高不允许写入电脑。
- xxx.bat文件
C:\Windows\system32\taskkill.exe /f /im WeChat.exe
- 超链接
<a onclick="jsRun()">点开exe</a>
<a href="myprotocol"://" id="runexe" style="display:none">点开exe</a>
<a href="closeexe"://" id="closeexe"style="display:none">jsRun点开exe</a>
- js调用
function jsRun(){
$("#closeexe").onclick();
setTimeout(function(){
$("#runexe").onclick();
},700);
}