2010-09-29 4 views
3

J'ajoute Custom Action dans mon projet de configuration VS2008 (programme d'installation MSI).pourquoi WaitForExit() n'attend pas?

J'appelle un fichier séquentiel pour créer une base de données et je veux supprimer ces fichiers après. J'ai WaitForExit() mais il n'attendra pas. Pourquoi?

  ProcessStartInfo startInfo = new ProcessStartInfo(); 
      startInfo.UseShellExecute = false; 
      string tempDir = @"C:\Temp\"; 
      startInfo.FileName = tempDir + "sybaseDB\\en_AllInOne_installDB.bat"; 
      startInfo.Arguments = tempDir + "sybaseDB\\"; 

      try 
      { 
       Process startDB = Process.Start(startInfo); 
       startDB.WaitForExit(); 

      } 
      catch (Exception e) 
      { 
       //do something? 
      } 
      finally { 
       System.IO.File.Delete(tempDir); 
      } 

aucune différence avec startInfo.UseShellExecute = true; Le lot a été exécuté sans aucun problème car il nécessite une entrée de l'utilisateur et j'ai entré y et n pour les questions. mais cette action de suppression est arrivée avant ma contribution. Et j'ai une pause à la fin du fichier batch. Je peux regarder le processus du fichier batch en cours.

EDIT: J'ai testé plus de 10 fois, cela n'a pas fonctionné. Après le déjeuner, j'ai mis un autre waitForExit et une boucle while avec la vérification HasExited. il va dormir à l'intérieur de la boucle while. J'ai trouvé ça travaillé. Puis j'ai supprimé ce code supplémentaire, retour à un WaitForExit. Cela semble fonctionner maintenant.

+1

Votre gestionnaire d'exception '// fait quelque chose?' Est mauvais. S'il y a une exception au démarrage du processus, vous ne le saurez pas. –

+0

y aura quelque chose plus tard – 5YrsLaterDBA

+2

Eh bien, mettez quelque chose * maintenant * si vous * savoir * si c'est la raison. –

Répondre

0

Cela génère probablement une exception car vous ne pouvez pas exécuter un fichier .bat. Vous avez probablement l'intention d'exécuter cmd.exe en donnant le fichier .bat comme argument de ligne de commande.

+0

aucun problème avec le fichier batch. Il a été lancé et je peux regarder tout le processus. Cela prendra quelques secondes pour finir. – 5YrsLaterDBA