为什么WaitForExit()不等待?
问题描述:
我将自定义操作添加到我的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。现在看来工作。
答
这可能会引发异常,因为您无法执行.bat文件。您可能打算通过将.bat文件作为命令行参数来执行cmd.exe。
+0
批处理文件没有问题。它已启动,我可以观看整个过程。完成需要几秒钟的时间。 – 5YrsLaterDBA 2010-09-29 17:49:06
你的'//做些什么?'异常处理程序是不好的。如果在启动流程时出现异常情况,您将无法知晓。 – 2010-09-29 17:19:58
稍后会有些东西 – 5YrsLaterDBA 2010-09-29 17:24:20
好吧,现在放一些东西*让你知道*这是否是原因。 – 2010-09-29 17:33:15