我有以下C#代码:
private void executeBat(string batfile)
{
ProcessStartInfo psi = new ProcessStartInfo(batfile);
psi.CreateNoWindow = true;
psi.ErrorDialog = false;
psi.UseShellExecute = false;
psi.RedirectStandardError = false;
psi.RedirectStandardOutput = false;
Process p = Process.Start(psi);
p.WaitForExit();
if (p.ExitCode != 0)
{
throw new Exception("bat script failed with exit code " + p.ExitCode + ".");
}
p.Close();
}
string batFile = @"C:\Data\SomeFolder\AnotherFolder\SomeBat.bat";
executeBat(batFile);
运行一个如下所示的.bat脚本:
"c:\Program Files (x86)\SomeThirdParty\SomeExe" >C:\Data\SomeLog.txt 2>&1
set exitcode=%errorlevel%
echo "error return is %exitcode%" >>C:\Data\SomeLog.txt
exit /b %exitcode%
SomeLog.txt文件如下所示:
"error return is 0"
但似乎.bat并没有真正退出,因为c#代码永远不会从p.WaitForExit()返回。
其他人遇到过这个问题,但我的报告不同,因为我不是在阅读stdout或stderr。
这不会持续发生。也许1000次执行中有1次。
这是一个很大的线索...... 它只发生在我从Task Scheduler运行c#代码时。当我从命令行运行它时,我从来没有遇到过这个问题。