从Process.Start()运行时,bat脚本挂起

时间:2018-02-03 18:17:47

标签: c# batch-file

我有以下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#代码时。当我从命令行运行它时,我从来没有遇到过这个问题。

0 个答案:

没有答案