Process.WaitForExit返回false

时间:2018-01-26 21:04:08

标签: c#

我有以下代码因batch did not finish in 20 seconds错误而定期失败。

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);
    if (!p.WaitForExit(20000))
    {
        throw new Exception("batch did not finish in 20 seconds.");
    }
    if (p.ExitCode != 0)
    {
        throw new Exception("batch failed with exit code " + p.ExitCode + ".");
    }

    p.Close();
}

最初我认为批处理脚本挂起但我添加了代码,它实际上在不到一秒的时间内运行。

这是批处理脚本:

"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%

日志文件包含"error return is 0"

.exe运行正常,表明它更新的数据库更新正常。

这种情况大约每500次运行一次。

我怎样才能调试为什么Process.WaitForExit返回false,尽管运行正常?

我的下一步是删除20000并放弃处理挂起的进程。

1 个答案:

答案 0 :(得分:1)

这是我学到的......

这是在任务计划程序上运行的,任务计划程序正在终止批处理脚本,因为它运行得很长。

所以,我正在改变我的分析重点,从它为什么返回非零到为什么批处理脚本没有退出或者至少没有被检测为退出。

我将此标记为已解决,即使它尚未真正解决。它只是解释了。