1

flex4.6 を使用していて、.bat ファイルを ma air アプリケーションから実行したかったのですが、助けはありますか?

4

2 に答える 2

3

NativeProcessクラス を使用できます。http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/desktop/NativeProcess.html

于 2012-11-27T08:30:43.500 に答える
2

これを試して

このクラスはあなたに役立つかもしれません my_command.bat echo "Hello Native Process"

アプリケーション (Projectname-app.xml) を実行する前に、supportedProfiles タグを確認してください。

デスクトップ 拡張デスクトップ モバイルデバイス 拡張モバイルデバイス

拡張デスクトップ

package
{

  import flash.desktop.NativeProcess;
import flash.desktop.NativeProcessStartupInfo;
import flash.events.ProgressEvent;
import flash.filesystem.File;

import mx.controls.Alert;

public class PlatformPackaging
{
    private var nativeProcess:NativeProcess;
    private var isErrorOccured:Boolean;

    private var batFile:File;
    private var cmdFile:File;

    private function get isWindows():Boolean
    {
        return true;
    }

    public function PlatformPackaging()
    {
    }

    public function start(targetPlatform:String):void
    {
        if(isWindows)
        {
            batFile = File.applicationDirectory.resolvePath("publish/my_command.bat");
            cmdFile = new File("c:\\Windows\\System32\\cmd.exe");
        } 

        proceedToPackaging();
    }


    private function proceedToPackaging():void {

        var processArgs:Vector.<String> = new Vector.<String>;

        processArgs.push("/c");
        processArgs.push(batFile.nativePath);

        var workingDirectory:File = File.applicationDirectory.resolvePath("publish/");
        var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();

        nativeProcessStartupInfo.arguments = processArgs;
        nativeProcessStartupInfo.executable = cmdFile;
        nativeProcessStartupInfo.workingDirectory = workingDirectory;

        nativeProcess = new NativeProcess();
        nativeProcess.addEventListener(ProgressEvent.STANDARD_ERROR_DATA,onStandardErrorOutputDataHandler);
        nativeProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA,onStandardOutputDataHandler);
        nativeProcess.start(nativeProcessStartupInfo);
    }

    private function onStandardErrorOutputDataHandler(event:ProgressEvent) : void
    {
        var certResponse:String = nativeProcess.standardError.readUTFBytes(nativeProcess.standardError.bytesAvailable);

        trace(certResponse);
        nativeProcess.removeEventListener(ProgressEvent.STANDARD_ERROR_DATA,onStandardOutputDataHandler);
        nativeProcess.exit();
    }

    Alert.show(certResponse,'Error');
}

protected function onStandardOutputDataHandler(event:ProgressEvent):void
{
    var status:String = nativeProcess.standardOutput.readUTFBytes(nativeProcess.standardOutput.bytesAvailable);

    Alert.show(status)
}
 }
}

説明があれば教えてください。

于 2012-11-28T08:05:44.203 に答える