2010-09-29 111 views
3

我将自定义操作添加到我的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来表示问题。但是删除操作发生在我的输入之前。我在批处理文件的末尾有一个暂停。我可以观看批处理文件的进程。

编辑: 我测试了超过10次,它没有工作。午餐后,我再放一个waitForExit和一个带有HasExited检查的while循环。它会睡在while循环内。我发现它的工作。然后我删除了这些额外的代码,回到一个WaitForExit。现在看来工作。

+1

你的'//做些什么?'异常处理程序是不好的。如果在启动流程时出现异常情况,您将无法知晓。 – 2010-09-29 17:19:58

+0

稍后会有些东西 – 5YrsLaterDBA 2010-09-29 17:24:20

+2

好吧,现在放一些东西*让你知道*这是否是原因。 – 2010-09-29 17:33:15

回答

0

这可能会引发异常,因为您无法执行.bat文件。您可能打算通过将.bat文件作为命令行参数来执行cmd.exe。

+0

批处理文件没有问题。它已启动,我可以观看整个过程。完成需要几秒钟的时间。 – 5YrsLaterDBA 2010-09-29 17:49:06