2010-09-29 5 views
3

Я добавляю Custom Action в мой проект установки VS2008 (установщик MSI).почему WaitForExit() не ждет?

Я вызываю командный файл для создания базы данных и хочу удалить эти файлы после. У меня есть WaitForExit(), но он не будет ждать. Зачем?

  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); 
      } 

без разницы с startInfo.UseShellExecute = true; Пакет был выполнен без каких-либо проблем, поскольку он требует ввода пользователем, и я вводим y и n для вопросов. но это действие удаления произошло до ввода. И у меня есть пауза в конце командного файла. Я могу наблюдать за процессом пакетного файла.

EDIT: Я тестировал более 10 раз, это не сработало. После обеда я поставил еще один waitForExit и цикл while с проверкой HasExited. он будет спать внутри цикла while. Я нашел, что это сработало. Затем я удалил этот дополнительный код, вернувшись к одному WaitForExit. Кажется, сейчас работает.

+1

Ваш обработчик обработчика '// что-то?' - это плохо. Если при запуске процесса возникает исключение, вы об этом не узнаете. –

+0

будет что-то там позже – 5YrsLaterDBA

+2

Ну что ж, поставьте там что-то * сейчас *, так что вы * знаете *, является ли это причиной. –

ответ

0

Возможно, это исключение, поскольку вы не можете выполнить файл .bat. Возможно, вы намереваетесь выполнить cmd.exe, предоставив файл .bat в качестве аргумента командной строки.

+0

никаких проблем с пакетным файлом. Он был запущен, и я могу наблюдать за всем процессом. Для завершения потребуется несколько секунд. – 5YrsLaterDBA

Смежные вопросы