2017-06-12 87 views
1

我正在运行我们的adobe air应用程序中的.net.exe文件。 .exe文件接收不同的参数。所以当我必须发送新的参数时,我会停止这个过程并重新开始新的参数。我使用的exit()的NativeProcess方法,但是当我再次启动的EXE它给我如何在Adobe AIR桌面应用程序中重新启动NativeProcess?

Error: Error #3213: Cannot perform operation on a NativeProcess that is already running. at Error$/throwError() at 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); 

这运行代码绝对好。在另一个click事件我打电话

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的错误已经在运行。有人能帮助我做错了什么吗?

回答

2

如果您在退出后立即重新启动进程,则可能是退出时间稍长,并且进程尚未“退出”。

尝试监听时的过程确实结束时分派的退出事件,然后重新启动过程:

process.addEventListener(NativeProcessExitEvent.EXIT, onProcessExit); 

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

当你调用exit(),它不保证该过程将结束,因为它发生在闪光范围之外。作为最后一招,您可以尝试强制该过程退出:

process.exit(true); 
相关问题