Flex 调用本地应用程序

    技术2026-09-03  3

    这两天要完成一个功能,就是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控件初始化并执行脚本'' 。

     

     

    //调用exefunction 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;}

       

    最新回复(0)