Adobe air Native Process仅适用于Flash环境,但部署后我会收到错误#3219

时间:2011-07-30 16:34:28

标签: actionscript process air desktop native

我一直在尝试使用ffmpeg和我在flash cs5.5中制作的空中应用程序。我有它,所以ffmpeg.exe需要位于安装航空应用程序的目录(File.applicationDirectory.nativePath)。

出于某种原因,这仅在我通过flash dev环境运行程序时才有效。但是当我实际部署应用程序时,我收到错误#3219:无法启动NativeProcess。 ffmpeg.exe位于同一文件夹中。

我实际上并不知道它给出的完整信息......不确定错误的属性会在我抓住它时给我那条消息。我所知道的是它的错误3219。

这会是个人资料问题吗?如果我没有扩展的桌面桌面配置文件,我认为我不会得到这个错误,我会得到一个分析错误不是吗?

我也禁用了用户访问控制......我正在使用Windows 7.

2 个答案:

答案 0 :(得分:4)

所以我是OP,我刚刚意识到如果你不通过exe安装程序安装air应用程序就不能使用本机进程调用,这是发布设置中的一个选项。我一直在使用空气安装工具。

答案 1 :(得分:2)

有一件事要提到(我相信你已经知道)NativeProcess只能在编译它的操作系统上运行,所以如果你在windows框上编译你的NativeProcess只能在windows上运行而不能在unix /上运行MAC。

我不知道你是如何调用本机进程的,但这里是我提取的一个工作类的代码片段,也许将它与你的aproach进行比较它会给你一些提示来找到问题:)< / p>

        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);
    }