2017-06-12 126 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); 
相關問題