Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Компиляция с помощью fcsh, вызванного как NativeProcess (http://www.flasher.ru/forum/showthread.php?t=213737)

DEVORON 26.12.2016 14:45

Компиляция с помощью fcsh, вызванного как NativeProcess
 
Пытаюсь скомпилировать флешку через fcsh.exe, вызванный как NativeProcess
Тrace показывает только запуск оболочки, но команду компиляции не обрабатывает. И ошибок никаких не выдаёт. Какие есть мысли?

Вывод команды trace

Adobe Flex Compiler SHell (fcsh)
Version 4.6.0 build 23201
Copyright (c) 2004-2011 Adobe Systems, Inc. All rights reserved.

(fcsh)


Код AS3:

private function startShell():void
                {
                        fcsh = new NativeProcess();
                        fcsh.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onStandardOutput);
                        fcsh.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onStandardError);
                        fcsh.addEventListener(NativeProcessExitEvent.EXIT, shellExit);
 
                        shellInfo.executable = new File("F:\\sdk\\bin\\fcsh.exe");
                        shellInfo.workingDirectory =  new File("F:\\");
 
                        fcsh.start(shellInfo);
 
                        var input:IDataOutput = fcsh.standardInput;
                        input.writeUTFBytes("mxmlc -file-specs Script.as -o Script.swf debug=true -static-link-runtime-shared-libraries=true");
                }
 
 
private function onStandardOutput(e:ProgressEvent):void
                {
                        if (!fcsh) return;
                        var output:IDataInput = fcsh.standardOutput;
                        var data:String = output.readUTFBytes(output.bytesAvailable);
 
                        trace(data);
 
}


ShockWave512 27.12.2016 01:20

В доке адобовской совсем по другому передаются параметры:

Код AS3:

var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
var file:File = File.applicationDirectory.resolvePath("test.py");
nativeProcessStartupInfo.executable = file;
 
var processArgs:Vector.<String> = new Vector.<String>();
processArgs[0] = "foo";
nativeProcessStartupInfo.arguments = processArgs;
 
process = new NativeProcess();
process.start(nativeProcessStartupInfo);


Nooob 28.12.2016 04:57

fcsh ожидает перенос строки для начала выполнения команды
Код AS3:

input.writeUTFBytes("mxmlc -file-specs Script.as -o Script.swf debug=true -static-link-runtime-shared-libraries=true\n");

Несколько рекомендаций:
1. Для чтения output в Windows используй output.readMultiByte(output.bytesAvailable, "windows-1251");
2. Для стабильной работы нужно сначала дождаться в output ответа "(fcsh) " и только потом писать в input
3. Так как fcsh.exe,mxmlc.exe,compc.exe требуют java x86, при наличии в системе только java x64 будет ошибка, вместо этого нужно использовать java.exe -jar lib/fcsh.jar
4. Eсли нужно скомпилировать вызывай нужный компилятор java.exe -jar lib/mxmlc.jar а не Shell обертку fcsh
5. Не используй Air для build tool, для этого есть специализированные инструменты ant, gradle, maven, bash, cmd, Python или java для нетривиальных задач

DEVORON 10.01.2017 21:48

Спасибо за развёрнутые ответы.
Nooob, у меня центральное ядро, которое работает с исходниками, управляет swc и прочим, обращается по LocalConnection к SDKMediator'у(рабочее название) - AdobeAir-приложению, содержащему в себе функции fcsh, adt, adl. Смысл понятен из названия. Все эти танцы с бубном для того, чтобы компилятор был максимально отделён. Если он упадёт или перестанет отвечать, то основное приложение его просто перезапустит.

Я понимаю, конечно, что я могу это утилитное приложение написать и на java, но особой разницы не вижу. Да и связь между модулями придётся делать иначе


Часовой пояс GMT +4, время: 09:40.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.