Adobe air Native Process работает только во флэш-среде, но при развертывании я получаю сообщение об ошибке № 3219 - PullRequest
2 голосов
/ 30 июля 2011

Я пытался использовать ffmpeg с приложением air, которое я сделал во flash cs5.5. У меня так, что ffmpeg.exe должен находиться в каталоге, где установлено приложение air (File.applicationDirectory.nativePath).

По какой-то причине это работает, только когда я запускаю программу через среду flash dev. Но когда я действительно внедряю приложение, я получаю ошибку # 3219: NativeProcess не может быть запущен. ffmpeg.exe находится в той же папке.

На самом деле я не знаю полное сообщение, которое оно дает ... не уверен, какое свойство ошибки выдаст мне это сообщение, когда я его поймаю. Я знаю только, что это ошибка 3219.

Это будет проблема профиля? Если бы у меня не было расширенного профиля рабочего стола, я не думаю, что смогу получить эту ошибку, я бы получил ошибку профилирования, не так ли?

Я также отключил контроль доступа пользователей ... Я использую Windows 7.

Ответы [ 2 ]

4 голосов
/ 01 августа 2011

Так что я OP, и я только что понял, что вы не можете использовать собственные вызовы процессов, если не устанавливаете приложение air через установщик exe, который является опцией в настройках публикации.Я пользуюсь установщиком воздуха.

2 голосов
/ 30 июля 2011

Следует упомянуть, что (я уверен, вы уже знаете) NativeProcess работает только на той ОС, где он был скомпилирован, поэтому, если вы компилируете в окне Windows, ваш NativeProcess будет работать только на окнах, а не на Unix / макинтош.

Я не знаю, как вы называете нативный процесс, но вот фрагмент кода, который я извлек из одного из моих рабочих классов, возможно, сравнивая его с вашим подходом, он даст вам подсказку, чтобы найти проблему:)

        import flash.desktop.*;
        import flash.errors.*;
        import flash.events.*;
        import flash.filesystem.*;

        public function execute():void
    {
                    var executablePath:String = "C:\ffmpeg.exe";
                    var parametersString:String = "-i input.avi -b 64k output.avi";

        if(NativeProcess.isSupported) {

            var args:Vector.<String> = new Vector.<String>();
                var file:File = new File(String(executablePath));
            var parameters:Array;
            parameters = parametersString.split(" ");
            for each ( var parameter:String in parameters ) {
                    args.push(parameter);
            }
        }

        var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
        nativeProcessStartupInfo.executable = file;
        nativeProcessStartupInfo.arguments = args;

        startExecution(nativeProcessStartupInfo);
    }

    private function startExecution(nativeProcessStartupInfo:NativeProcessStartupInfo):void
    {
        var nativeProcess:NativeProcess = new NativeProcess();
                nativeProcess.addEventListener(NativeProcessExitEvent.EXIT, onExitError);
            var msg:String = "";

                try {
                    nativeProcess.start(nativeProcessStartupInfo);
                    trace("Trying to start process");
                } catch (error:IllegalOperationError) {
                    trace("Illegal Operation: "+error.toString());
                } catch (error:ArgumentError) {
                    trace("Argument Error: "+error.toString());
                } catch (error:Error) {
                    trace("Error: "+error.toString());
                }

                if (nativeProcess.running) {
                    trace("Native Process Support");
                }
    }

    public function onExitError(event:NativeProcessExitEvent):void
    {
        trace("Native Process Exit code: "+event.exitCode);
    }
...