2010-10-29 6 views
3

Je veux exécuter un fichier .exe depuis mon application Flash/Flex/AIR, Comment est-ce possible? Ce dont j'ai besoin est de construire une interface pour ouvrir un fichier xls et le convertir en swf, j'ai le fichier convertisseur qui est un fichier exe, quand je cours convert.exe infile.xls outFile.swf. une fois la conversion terminée, j'ai besoin de montrer tous les swfs dans mon application.Comment faire pour exécuter un fichier EXE à partir de Flash/Flex/AIR?

Je connais Action Script 3.0.

+1

Pourquoi ne pas accepter les réponses? J'ai vu certaines de vos questions et beaucoup ont d'excellentes réponses (qui répondent à la question, par exemple) mais vous ne les acceptez pas. Pourquoi? –

Répondre

8

Je pense que cela peut être fait avec AIR depuis la version 2.0 en utilisant NativeProcess. Je ne sais pas si vous pouvez exécuter un fichier .exe (à cause des problèmes de sécurité) mais je sais que vous pouvez exécuter des scripts python (je l'ai fait) afin de pouvoir créer un script python qui appelle votre fichier .exe

Voici le (commenté) par exemple de l'aide de NativeProcess:

// ... 
// package and imports declarations 
// ... 

public class NativeProcessExample extends Sprite 
{ 
    // this is the process 
    public var process:NativeProcess; 

    public function NativeProcessExample() 
    { 
     // we have to know if we can run NativeProcess 
     if(NativeProcess.isSupported) 
      setupAndLaunch(); 
     else 
      trace("NativeProcess not supported."); 
    } 

    public function setupAndLaunch():void 
    {  
     // we create a NativeProcessStartupInfo, this will tell the what process do you want to run 
     var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo(); 
     var file:File = File.applicationDirectory.resolvePath("test.py"); 
     nativeProcessStartupInfo.executable = file; 

     // now create the arguments Vector to pass it to the executable file 
     var processArgs:Vector.<String> = new Vector.<String>(); 
     processArgs[0] = "foo"; 
     nativeProcessStartupInfo.arguments = processArgs; 

     // create the process 
     process = new NativeProcess(); 

     // listen to events for I/O and Errors 
     process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData); 
     process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData); 
     process.addEventListener(NativeProcessExitEvent.EXIT, onExit); 
     process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError); 
     process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError); 

     // run it! 
     process.start(nativeProcessStartupInfo); 
    } 

    // event handlers 
    public function onOutputData(event:ProgressEvent):void 
    { 
     trace("Got: ", process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable)); 
    } 

    public function onErrorData(event:ProgressEvent):void 
    { 
     trace("ERROR -", process.standardError.readUTFBytes(process.standardError.bytesAvailable)); 
    } 

    public function onExit(event:NativeProcessExitEvent):void 
    { 
     trace("Process exited with ", event.exitCode); 
    } 

    public function onIOError(event:IOErrorEvent):void 
    { 
     trace(event.toString()); 
    } 
} 

J'espère que cela aide

+0

vous pouvez exécuter des fichiers .exe, vous ne pouvez pas exécuter les fichiers .bat. De même, pour utiliser NativeProcess, le programme d'installation .air doit être converti en un programme d'installation natif (.exe, .dmg, etc.), ce qui peut être accompli en utilisant ADT. – TheDarkIn1978

+0

Un utilisateur peut accéder aux fichiers du lecteur local à partir de Flash Player. Ce n'est pas un problème de sécurité direct car l'utilisateur doit être invité en premier. Ainsi, l'invite ou la pression requise d'un bouton agit comme un bac à sable (dans un sens doux). Je ne vois pas comment l'accès aux fichiers locaux est différent de l'exécution d'un fichier .exe dans le lecteur. –

Questions connexes