Собственный процесс не запускается в скомпилированном файле .air; нормально работает при запуске через adl

Рабочий код:

При запуске adl application.xml в разрабатываемом проекте AIR мой собственный процесс работает нормально, используя этот код:

var os = air.Capabilities.os.toLowerCase();
if(os.indexOf('win') >= 0)
    var exe = 'win/myExecutable.exe';
else if(os.indexOf('mac') >= 0)
    var exe = 'mac/myExecutable';
else if(os.indexOf('linux') >= 0)
    var exe = 'nix/myExecutable';

var file = air.File.applicationDirectory.resolvePath('res/somepath/' + exe);

var args = new air.Vector["<String>"]();
args.push('anArgument');
args.push('another');

var info = new air.NativeProcessStartupInfo();
info.executable = file;
info.arguments = args;

var process = new air.NativeProcess();
process.start(info);
process.closeInput();

С этой директивой в application.xml:

<supportedProfiles>extendedDesktop desktop</supportedProfiles>

Проблема:

После компиляции моего приложения в файл .air исполняемый файл не запускается.

Отладка:

После добавления пустого файла с именем debug в C:\Program Files (x86)\My App\My App\META-INF\AIR и добавления файла с именем mm.cfg в %USERPROFILE% со следующим:

ErrorReportingEnable=1
MaxWarnings=1000
SuppressDebuggerExceptionDialogs=1
TraceOutputFileEnable=1

Следующий вывод записывается в %USERPROFILE%\AppData\Roaming\Macromedia\Flash Player\Logs\flashlog.txt:

Ошибка: Ошибка № 3219: не удалось запустить NativeProcess. «Не поддерживается в текущем профиле».

Как я могу это исправить?


person Danny Beckett    schedule 26.07.2013    source источник


Ответы (1)


Предпосылки:

В статье Упаковка собственного установщика для настольных компьютеров на веб-сайте Adobe говорится:

Приложения, устанавливаемые с помощью собственного установщика приложений, называются приложениями с расширенным профилем рабочего стола.

It goes on:

Когда вы создаете собственный установщик для распространения приложения AIR, приложение получает следующие возможности:

  • Он может запускать собственные процессы и взаимодействовать с ними, используя класс NativeProcess.

Компиляция:

По сути, ваш файл .air должен быть скомпилирован как собственный установщик (то есть файл .exe, .dmg, .deb или .rpm), чтобы вы могли использовать собственные процессы (а также несколько других вещей).

Для этого установите AIR SDK (информацию о том, как это сделать, можно найти в другом моем ответе, здесь), и запустите эту команду из командной строки:

adt -package -target native "Output file.exe" "Input file.air"

Полученный установщик (со встроенной средой выполнения AIR) теперь будет отлично работать с процессами!

Последнее слово о кросс-совместимости:

Вы должны использовать ADT в той же операционной системе, что и собственный файл установки, который вы хотите создать. Итак, чтобы создать EXE-файл для Windows, запустите ADT в Windows. Чтобы создать файл DMG для Mac OS, запустите ADT в Mac OS. Чтобы создать файл DEB или RPG1 для Linux, запустите ADT из AIR 2.6 SDK в Linux.

1. Это опечатка со стороны Adobe и следует читать RPM, а не RPG.

Если вы хотите, чтобы файл был исполняемым в установленном приложении, убедитесь, что он является исполняемым в файловой системе, когда вы упаковываете свое приложение. (В Mac и Linux вы можете использовать chmod для установки флага исполняемого файла, если это необходимо.)

person Danny Beckett    schedule 26.07.2013