如何在adobe air桌面应用程序中重新启动NativeProcess?

时间:2017-06-12 13:02:01

标签: flash flex air adobe

我正在运行adobe air应用程序中的.net .exe文件。 .exe文件接收不同的参数。因此,当我必须发送新参数时,我会停止该过程并使用新参数重新开始。我正在使用NativeProcess的exit()方法,但是当我再次启动exe给它时

  

错误:错误#3213:无法对已在运行的NativeProcess执行操作。    at Error $ / throwError()    在flash.desktop :: NativeProcess / start()

我已将nativeProcess初始化为静态变量:

public  static var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
public static var process:NativeProcess = new NativeProcess();

然后在点击事件中我调用了exe文件

var file:File = File.desktopDirectory;
file = file.resolvePath("C:\\somepath.exe");
var ar:Vector.<String> = new Vector.<String>();
ar.push("0");
ar.push("C:\\temp\\APIData.xml");

nativeProcessStartupInfo.executable = file;
nativeProcessStartupInfo.arguments = ar;
process.start(nativeProcessStartupInfo);

这运行代码绝对正常。在另一个点击事件我打电话

process.exit()

然后再次运行exe

var file:File = File.desktopDirectory;
file = file.resolvePath("C:\\somepath.exe");
var ar:Vector.<String> = new Vector.<String>();
ar.push("1");
ar.push("C:\\temp\\APIData.xml");

nativeProcessStartupInfo.executable = file;
nativeProcessStartupInfo.arguments = ar;
process.start(nativeProcessStartupInfo);

但是在这个其他点击事件中我得到了NativeProcess已经运行的错误。有人可以帮助我,我做错了什么?

1 个答案:

答案 0 :(得分:2)

如果您在退出后立即重新启动流程,则可能是退出需要更长时间并且流程没有退出&#34;爱好。

尝试侦听进程真正结束时调度的exit事件,然后重新启动进程:

process.addEventListener(NativeProcessExitEvent.EXIT, onProcessExit);

private function onProcessExit(e:NativeProcessExitEvent):void
{
    // restart your process from here
}

当您调用exit()时,无法保证该过程将在闪存范围之外发生。作为最后的手段,您可以尝试强制退出流程:

process.exit(true);