Я занимаюсь разработкой приложения AIR. Это приложение нуждается в некоторых аппаратных доступах, которые невозможны с AIR. Я решил использовать класс NativeApplication в AIR, который запускает исполняемый файл C #. Затем приложение AIR и «собственное» приложение обмениваются данными со стандартным потоком вывода и стандартными входными потоками.
Немного так:
private var np:NativeProcess = new NativeProcess();
private var npi:NativeProcessStartupInfo = new NativeProcessStartupInfo();
private var args:Vector.<String> = new Vector.<String>();
private function creationCompleteHandler(event:FlexEvent):void {
args.push("myCommand");
args.push("myParameter");
npi.arguments = args;
npi.executable = File.applicationDirectory.resolvePath("MyNativeExe.exe");
np.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onData);
np.start(npi);
}
private function onData(e:ProgressEvent):void {
while(np.standardOutput.bytesAvailable != 0) {
trace(String.fromCharCode(np.standardOutput.readByte()));
}
}
Я поместил файл MyNativeExe.exe в каталог приложения, установил значение "extendedDesktop" в * -app.xml supportProfiles, и он отлично работает.
Теперь я хотел бы создать своего рода SWC-библиотеку AS3, которая встраивает MyNativeExe.exe и предоставляет класс AS3 для управления взаимодействием с MyNativeExe.exe. Поэтому я мог бы легко использовать эту работу в других проектах AIR, просто добавив файл SWC в виде библиотеки. Возможно, мне придется вручную добавить значение "extendedDesktop" в новые проекты AIR, но это не проблема.
И я застрял. Я могу встроить EXE-файл в SWC-файл, вручную выбрав ресурсы для встраивания в Flash Builder, но ...
- он не будет автоматически вставляться в окончательный файл SWF, поскольку только SWF-файл объединяет только необходимые части файла SWF
- , даже если это так (принудительное объединение с тегом [Embed], ...), как я могу получить доступ и выполнить встроенный EXE-файл? Для NativeProcessInfo.executable требуется объект File, а не поток байтов.
Единственная идея, которая у меня есть, - встроить EXE-файл с помощью [Embed], загрузить его как байтовый массив, создать новый файл с байтовым массивом в качестве данных, а затем выполнить файл. Я не знаю, работает ли это, но мне не нравится эта идея, поскольку она подразумевает дублирование EXE-файла.
У кого-нибудь есть идея?
Спасибо!