AIR NativeProcess standardInput stellt keine Verbindung zur App her

Ich schreibe eine AIR-App, die eine C # -Konsolenanwendung startet und die kommunizieren muss. Ich würde gerne die Standardeingabe / Standardausgabe verwenden, aber ich kann es scheinbar nicht zum Laufen bringen.

Wenn die C # -App Eingaben von der Standardeingabe erhält, soll sie diese über die Standardausgabe zurücksenden. Wenn sie "exit" empfängt, wird sie beendet. Ich kann dies über die Befehlszeile testen und es funktioniert ordnungsgemäß. Wenn ich eine Zeichenfolge aus AIR sende, erhält die C # -App keine Antwort.

Ich sende ein Argument, wenn ich die C # -App starte, und bekomme eine Antwort darauf, sodass meine AIR-App zumindest Nachrichten von der Standardausgabe empfangen kann. Es handelt sich lediglich um eine Standardeingabe, die nicht funktioniert. Wenn ich eine Nachricht von AIR über standardInput sende, erhalte ich ein Fortschrittsereignis mit bytesLoaded = 3, wenn ich den Schlüsselcode sende, und bytesLoaded = 5, wenn ich den Befehl "exit" sende.

Hier ist der C # -Code:

static void Main(string[] args)
{
    if (args.Length > 0)
    {
        Console.WriteLine(args[0]);
    }
    while (true)
    {
        string incoming = Console.ReadLine();
        string outgoing = "received: " + incoming;
        Console.WriteLine(outgoing);
        if (incoming == "exit")
            return;
    }
}

Und hier ist der AS3-Code:

private function init(e:Event=null):void {
    this.removeEventListener(Event.ADDED_TO_STAGE, init);
    NativeApplication.nativeApplication.addEventListener(Event.EXITING, onAppClose);

    var info:NativeProcessStartupInfo = new NativeProcessStartupInfo();
    var file:File = File.applicationDirectory.resolvePath("test.exe");
    info.executable = file;

    process = new NativeProcess();
    info.arguments.push("native process started");
    process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData);
    process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData);
    process.addEventListener(ProgressEvent.STANDARD_INPUT_PROGRESS, onInputProgress);
    process.addEventListener(Event.STANDARD_OUTPUT_CLOSE, onOutputClose);
    process.addEventListener(Event.STANDARD_ERROR_CLOSE, onErrorClose);
    process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError);
    process.addEventListener(IOErrorEvent.STANDARD_INPUT_IO_ERROR, onIOError);
    process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError);
    stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);

    process.start(info);
}

private function onKeyUp(e:KeyboardEvent):void {
    if (e.keyCode == Keyboard.ESCAPE) 
        process.standardInput.writeUTFBytes("exit\n");
    else {
        var msg:String = e.keyCode + "\n";
        process.standardInput.writeUTFBytes(msg);
    }
}

private function onOutputData(e:ProgressEvent):void {
    var data:String = process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable); 
    trace("Got: ", data); 
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage