Как запустить файл EXE из Flash / Flex / AIR? - PullRequest
3 голосов
/ 29 октября 2010

Я хочу запустить файл .exe из приложения Flash / Flex / AIR. Как это возможно?

Мне нужно создать интерфейс для открытия файла xls и преобразования его в swf. У меня есть файл конвертера, который является exe-файлом, когда я запускаю convert.exe infile.xls outFile.swf. После того, как преобразование завершено, мне нужно показать все SWF-файлы внутри моего приложения.

Я знаю Action Script 3.0.

1 Ответ

8 голосов
/ 29 октября 2010

Я думаю, что это можно сделать с помощью AIR начиная с версии 2.0, используя NativeProcess. Я не знаю, можно ли запустить файл .exe (из-за проблем с безопасностью), но я знаю, что вы можете запускать скрипты python (я это сделал), чтобы вы могли создать скрипт python, который вызывает ваш файл .exe

Вот (прокомментированный) пример из справки 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());
    }
}

Надеюсь, это поможет

...