这两天要完成一个功能,就是swf文件调用本地exe程序,这涉及到两个问题:
1、swf无法直接调用exe文件
2、可以采用swf->调用js->调用本地exe,但是js调用在exe本地使用没问题,发布到web服务器上就有安全性的问题。
解决方法如下
flex中加入以下代码
//通过js程序调用外部exe程序
private function callExe():void { ExternalInterface.call("callExe","notepad.exe","c:ltdz1.txt"); }
然后在flash所在页面加入如下代码
function callExe(shellp,str)
{ try { var objShell = new ActiveXObject("wscript.shell"); objShell.Run(shellp+" "+str); objShell = null; } catch (e) { alert('找不到文件"'+shellp+'"(或它的组件之一)。请确定路径和文件名是否正确,而且所需的库文件均可用。') ;}
可以在html中加入控件调用测试javascript的代码
<BUTTON class="button" οnclick="Run('notepad','')">记事本</BUTTON><br>
这样在本地调用是成功的,但是把页面发布到web服务器上就会出发异常,提示找不到组件
原因与解决办法如下
那是因为ie里面被禁在外网执行。因此我们可以提示客户端的ie选项的安全的自定义级别里面的"对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本'' 启动就ok了,在里面有四种安全设置。internet 指所有网站都可以运行ActiveXObject,用起来客户端很危险。我们可以让客户端把我们的web服务器添加到受信任的站点,然后对其自定义级别启动"对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本'' 。
//调用exe
function exec(command,type) { try { if (navigator.userAgent.indexOf("MSIE") <= 0) { alert("请使用IE浏览器查看"); return; } var fso, f, s; fso = new ActiveXObject("Scripting.FileSystemObject"); if(!fso.FileExists(command)){ var msg=""; if(type=="cz"){ msg="未找到"+command; }else{ msg="可能未安装视频插件,确定下载安装吗?"; } var flag=confirm(msg); if(flag){ return "bucunzai"; }else if(type!="cz"){ return "cunzai" } return; } } catch (e) { if(e.number==-2146823281){ var msg=""; if(type=="cz"){ msg="未找到"+command; }else{ msg="可能未安装视频插件,确定下载安装吗?"; } var flag=confirm(msg); if(flag){ return "bucunzai"; }else if(type!="cz"){ return "cunzai" } return; } alert(e.number+":"+e.message); //alert("命令已经被用户禁止!请在ie选项的安全模块将此网站加入可信站点并启动该自定义级别中的'对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本'选项,之后刷新页面"); return "命令已经被用户禁止!请在ie选项的安全模块将此网站加入<可信站点>并<启动>该自定义级别中的'对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本'选项,之后<刷新>页面"; } if(type!="cz"){ return "cunzai"; } //alert(command); window.oldOnError = window.onerror; window._command = command; window.onerror = function (err) { if (err.indexOf("utomation") != -1) { //alert("命令已经被用户禁止!请在ie选项的安全模块将此网站加入可信站点并启动该自定义级别中的'对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本'选项,之后刷新页面"); return "命令已经被用户禁止!请在ie选项的安全模块将此网站加入<可信站点>并<启动>该自定义级别中的'对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本'选项,之后<刷新>页面"; } else { return false; } }; var wsh = new ActiveXObject("WScript.Shell"); if (wsh) { wsh.Run(command); } window.onerror = window.oldOnError; return window.oldOnError;}