Actionscript 3 如何在Air应用程序中实现NativeProcess

Actionscript 3 如何在Air应用程序中实现NativeProcess,actionscript-3,command-line,air,Actionscript 3,Command Line,Air,我需要用NativeProcess做一些非常简单的事情,我需要通过cmd行启动一个.exe文件并传递一个参数。我已经找到了NativeProcess示例,但它们都用于更复杂的事情,并且没有显示完整的实现。我有很多使用flash as3的经验,但不是在这个特定的领域。。。如果有人能告诉我这是如何从头到尾完成的,我将不胜感激。以下是Adobe网站上的代码,可以完全按照您的要求执行: package { public class Main extends Sprite {

我需要用NativeProcess做一些非常简单的事情,我需要通过cmd行启动一个.exe文件并传递一个参数。我已经找到了NativeProcess示例,但它们都用于更复杂的事情,并且没有显示完整的实现。我有很多使用flash as3的经验,但不是在这个特定的领域。。。如果有人能告诉我这是如何从头到尾完成的,我将不胜感激。

以下是Adobe网站上的代码,可以完全按照您的要求执行:

package
{
    public class Main extends Sprite
    {
        public var process:NativeProcess;

        public function Main()
        {
            if(NativeProcess.isSupported)
                setupAndLaunch();
            else
                trace("NativeProcess not supported.");
        }

        public function setupAndLaunch():void
        {     
            var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
            var file:File = File.applicationDirectory.resolvePath("yourapp.exe");
            nativeProcessStartupInfo.executable = file;

            var processArgs:Vector.<String> = new Vector.<String>();
            processArgs[0] = "the parameter you are passing";
            nativeProcessStartupInfo.arguments = processArgs;

            process = new NativeProcess();
            process.start(nativeProcessStartupInfo);
            process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData);
            process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorData);
            process.addEventListener(NativeProcessExitEvent.EXIT, onExit);
            process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError);
            process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError);
        }

        public function onOutputData(event:ProgressEvent):void
        {
            trace("Got: ", process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable)); 
        }

        public function onErrorData(event:ProgressEvent):void
        {
            trace("ERROR -", process.standardError.readUTFBytes(process.standardError.bytesAvailable)); 
        }

        public function onExit(event:NativeProcessExitEvent):void
        {
            trace("Process exited with ", event.exitCode);
        }

        public function onIOError(event:IOErrorEvent):void
        {
             trace(event.toString());
        }
    }
}
包
{
公共类Main扩展了Sprite
{
公共var过程:NativeProcess;
公共功能Main()
{
if(NativeProcess.isSupported)
setupAndLaunch();
其他的
跟踪(“不支持NativeProcess”);
}
公共函数setupAndLaunch():void
{     
var nativeProcessStartupInfo:nativeProcessStartupInfo=new nativeProcessStartupInfo();
var file:file=file.applicationDirectory.resolvePath(“yourapp.exe”);
nativeProcessStartupInfo.executable=文件;
变量processArgs:Vector.=新向量。();
processArgs[0]=“您正在传递的参数”;
nativeProcessStartupInfo.arguments=processArgs;
进程=新的NativeProcess();
进程启动(nativeProcessStartupInfo);
process.addEventListener(ProgressEvent.STANDARD_输出数据,onOutputData);
process.addEventListener(ProgressEvent.STANDARD_ERROR_数据,onErrorData);
process.addEventListener(nativeProcessExiteEvent.EXIT,onExit);
process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR,onIOError);
process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR,onIOError);
}
公共函数onOutputData(事件:ProgressEvent):无效
{
跟踪(“get:,process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable));
}
公共函数onErrorData(事件:ProgressEvent):无效
{
跟踪(“错误-”,process.standardError.readUTFBytes(process.standardError.bytesAvailable));
}
公共函数onExit(事件:NativeProcessExiteEvent):无效
{
跟踪(“进程已退出”,事件.exitCode);
}
公共函数错误(事件:IOErrorEvent):无效
{
跟踪(event.toString());
}
}
}
重要信息
NativeProcess类及其功能仅适用于使用本机安装程序安装的AIR应用程序(扩展桌面配置文件应用程序)。调试时,可以将-profile extendedDesktop参数传递给ADL以启用NativeProcess功能。在运行时,您可以检查NativeProcess.isSupported属性以确定是否支持本机进程通信。

我在Flash Develop中通过将应用程序配置文件设置为
Extended Desktop
来测试上述内容,并且它可以正常工作


更多信息。

除了Baris Usaki的回答之外,我想补充两个非常重要的问题:

  • 您必须将应用程序发布为.dmg而不是.air。这样做将使 应用程序位于/Applications目录中

  • 您必须仅将配置文件设置为“扩展桌面”。还加 “桌面”,如果需要。否则,您将得到错误: “不支持NativeProcess”

  • 我能够运行像/usr/lib/osascript这样的可执行文件来运行.scpt文件。但是,我无法运行位于桌面文件夹中的任何其他.app文件。我找不到原因。

    -这是一个很好的起点。