我正在将自定义操作添加到我的VS2008安装项目(MSI安装程序)中。
我正在调用批处理文件来创建数据库,并希望删除这些文件。我有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。现在看起来很有效。
答案 0 :(得分:0)
这可能会引发异常,因为您无法执行.bat文件。您可能打算通过将.bat文件作为命令行参数来执行cmd.exe。