2017-06-12 2 views
1

Je cours un dossier de .net .exe de notre application d'air d'adobe. Le fichier .exe reçoit différents paramètres. Donc, quand je dois envoyer de nouveaux paramètres, j'arrête le processus et recommence avec de nouveaux paramètres. J'utilise la méthode exit() de NativeProcess mais quand je commence à nouveau l'exe il me donneComment redémarrer un NativeProcess dans une application de bureau adobe air?

Error: Error #3213: Cannot perform operation on a NativeProcess that is already running. at Error$/throwError() at flash.desktop::NativeProcess/start()

J'initialisé NativeProcess comme variable statique:

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

Puis un événement de clic que j'ai appelé fichier 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); 

Ceci exécute le code absolument bien. Sur un autre événement click j'appelle

process.exit() 

puis exécutez à nouveau l'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); 

Mais cet autre événement click je reçois l'erreur de NativeProcess déjà en cours d'exécution. Est-ce que quelqu'un peut m'aider, qu'est-ce que j'ai mal fait?

Répondre

2

Si vous redémarrez le processus juste après la sortie, il se peut que la sortie prenne un peu plus de temps et que le processus ne soit pas encore "sorti".

Essayez d'écouter l'événement de sortie qui est distribué lorsque le processus a vraiment terminé et relancer le processus:

process.addEventListener(NativeProcessExitEvent.EXIT, onProcessExit); 

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

Lorsque vous appelez exit() il est pas garanti que le processus prendra fin comme se passe en dehors de la portée du flash. En dernier recours, vous pouvez essayer de forcer le processus à sortir:

process.exit(true);