Flex 调用本地应用程序

本文介绍如何在Flex中调用本地应用程序,通过JS与ActiveXObject实现。详细讨论了由于Web服务器上的安全限制导致的执行问题,并提供了客户端调整IE安全设置的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天要完成一个功能,就是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   onclick="Run('notepad','')">记事本</BUTTON><br>

 

这样在本地调用是成功的,但是把页面发布到web服务器上就会出发异常,提示找不到组件

 

原因与解决办法如下

 

那是因为ie里面被禁在外网执行。因此我们可以提示客户端的ie选项的安全的自定义级别里面的"对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本'' 启动就ok了,在里面有四种安全设置。internet 指所有网站都可以运行ActiveXObject,用起来客户端很危险。我们可以让客户端把我们的web服务器添加到受信任的站点,然后对其自定义级别启动"对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本'' 。

web服务器的js让客户端执行exe - sarsea - 夏空 の LIFE

 web服务器的js让客户端执行exe - sarsea - 夏空 の LIFEweb服务器的js让客户端执行exe - sarsea - 夏空 の LIFE

 

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


   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值