Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Запуск mxmlc из AIR (http://www.flasher.ru/forum/showthread.php?t=156242)

Aloran 18.05.2011 18:19

Запуск mxmlc из AIR
 
Вот кусок кода для запуска компиляции swf из AIR:
Код AS3:

private function runMxmlc():void
{
    var argVector:Vector.<String>              = new Vector.<String>();
    argVector.push(SDK_PATH + "/bin/mxmlc.exe");
    argVector.push(" -output " + SWF_PATH + "lib.swf");
    argVector.push(LIB_CLASS_PATH + "Main.as");
    argVector.push(" -static-link-runtime-shared-libraries=true");
 
    var startupInfo:NativeProcessStartupInfo    = new NativeProcessStartupInfo();
    startupInfo.arguments                      = argVector;
    startupInfo.executable                      = new File("c:/windows/system32/cmd.exe");
 
    _process                                    = new NativeProcess();
    _process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA,    onProcessEvent);
    _process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA,    onProcessEvent);
    _process.addEventListener(NativeProcessExitEvent.EXIT,          onProcessEvent);
    _process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onProcessEvent);
    _process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR,  onProcessEvent);
    _process.start(startupInfo);
}

С помощью этого запроса я открываю cmd и пытаюсь запустить mxmlc.exe. По идее должна получиться следующая команда.
Код:

C:\docs\programs\flex_sdk_4.1.0.16076\bin\mxmlc.exe -output C:\docs\work\flash\progects\GenLib\files\lib.swf C:\docs\work\flash\progects\GenLib\files\tmp\Main.as -static-link-runtime-shared-libraries=true
Команда рабочая т.к. при вводе ее непосредственно в cmd, все ок.
Но при запуске air-проекта, lib.swf не создается. Трейсы в onProcessEvent() горорят что происходит только ProgressEvent.STANDARD_OUTPUT_DATA. Содержимое процесса, по сути, это cmd со строкой ввода:
Код AS3:

Microsoft Windows XP [‚&#165;&#224;&#225;&#168;&#239; 5.1.2600]
() &#352;®&#3054;&#224;*&#230;&#168;&#239; &#338;*©&#170;&#224;®&#225;®&#228;&#226;, 1985-2001.
 
C:\docs\work\flash\progects\GenLib>

Подскажите, что делаю не так или намекните как посмотреть, на самом ли деле запускается cmd и как реально выглядит команда на компиляцию.

alatar 18.05.2011 19:22

Цитата:

Класс NativeProcess и его возможности доступны только для приложений AIR, установленных с помощью собственной программы установки (то есть для приложений с профилем расширенного рабочего стола). В ходе отладки можно передать аргумент -profile extendedDesktop в ADL, чтобы обеспечить возможность выполнения процессов NativeProcess.
Что говорит NativeProcess.isSupported?

Aloran 19.05.2011 12:09

выдает true
extendedDesktop прописан в application.xml
буду признателен если подскажите как задать в FD аргументы для ADL

alatar 19.05.2011 12:22

Не подскажу ибо не пользуюсь FD

Aloran 19.05.2011 16:32

вопрос до сих пор актуален.

alatar 19.05.2011 16:43

Кстати, зачем финт ушами с запуском cmd? Что мешается сразу запустить mxmlc?

Aloran 19.05.2011 18:25

Сделал так
Код AS3:

private function runMxmlc():void
{
    var argVector:Vector.<String>              = new Vector.<String>();
    argVector.push(" -output " + SWF_PATH + "lib.swf");
    argVector.push(LIB_CLASS_PATH + "Main.as");
    argVector.push(" -static-link-runtime-shared-libraries=true");
 
    var startupInfo:NativeProcessStartupInfo    = new NativeProcessStartupInfo();
    startupInfo.arguments                      = argVector;
    startupInfo.executable                      = new File("C:/docs/programs/flex_sdk_4.1.0.16076/bin/mxmlc.exe");
 
    _process                                    = new NativeProcess();
    _process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA,    onProcessEvent);
    _process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA,    onProcessEvent);
    _process.addEventListener(NativeProcessExitEvent.EXIT,          onProcessEvent);
    _process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onProcessEvent);
    _process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR,  onProcessEvent);
    _process.start(startupInfo);
}

вот лог:
Код:

argVector =  -output C:\docs\work\flash\progects\GenLib\bin\files\just.swf  C:\docs\work\flash\progects\GenLib\bin\files\tmp\Main.as  -static-link-runtime-shared-libraries=true


standardOutputData
Loading configuration file C:\docs\programs\flex_sdk_4.1.0.16076\frameworks\flex-config.xml
standardOutputData
Adobe Flex Compiler (mxmlc)
Version 4.1.0 build 16076
Copyright (c) 2004-2009 Adobe Systems, Inc. All rights reserved.

standardErrorData
Error: unable to open ' -static-link-runtime-shared-libraries=true'
standardErrorData
Use 'mxmlc -help' for information about using the command line.
exit

запустился mxmlc, но параметры я передаю как то не так...

___________________

Нашел ответ:
Код AS3:

    var argVector:Vector.<String>               = new Vector.<String>();
    argVector.push(" -output=" + SWF_PATH + "lib.swf");
    argVector.push(LIB_CLASS_PATH + "Main.as");

после -output должен стоять знак "="...

alatar спасибо за помощь

alatar 19.05.2011 19:16

Цитата:

argVector.push(" -output " + SWF_PATH + "lib.swf");
argVector.push(LIB_CLASS_PATH + "Main.as");
argVector.push(" -static-link-runtime-shared-libraries=true");
Пробелы перед "-" уберите.

Добавлено через 4 минуты
+ все параметры с пробелами (кроме путей к файлам) должны быть разбиты на несколько параметров.

Добавлено через 5 минут
т.е. нельзя писать:
Код AS3:

args.push("-help list");

надо
Код AS3:

args.push("help");
args.push("list");



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

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