c# - Process.WaitForExit 返回 false

标签 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%

日志文件包含“错误返回为0”

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

每运行 500 次,大约有 1 次发生这种情况。

我如何调试为什么 Process.WaitForExit 在正常运行的情况下返回 false?

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

最佳答案

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

这是在 Task Scheduler 上运行的,而 Task Scheduler 正在终止批处理脚本,因为它运行时间太长。

因此,我将分析的重点从返回非零值的原因转移到批处理脚本未退出或至少未被检测为正在退出的原因。

我将其标记为已解决,即使它并未真正解决。刚刚解释过了。

关于c# - Process.WaitForExit 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48469493/

相关文章:

c# - 如何验证 asp.net 中的数字?

c# - 获取点到几何体的距离

c# - Parallel.ForEach 问题

c# - 合并 xps 文档使最后一个重复

c# - Azure DocumentDB 性能缓慢

将项目 .net 目标框架从 3.5 升级到 4.5 后日历中的 C# 错误

java - 搜索策略以有效地从服务或服务器加载数据?

c# - 从 CodeBehind 填充 GridView

c# - 如何在 OpenXML SDK 中拆分文档

c# - 如何使用 C# 在 Selenium 中单击超链接