任务计划程序中的.NET进程

时间:2009-12-24 02:06:15

标签: c# .net process scheduled-tasks

我有一个程序执行另一个程序,主程序在该程序完成后继续。

Process p = Process.Start("program2.exe");

while (!p.HasExited)
    Thread.Sleep(10000);

if (p.HasExited)
{
    // Execute more code
}

当我运行程序时,这很有效。但是当它在Windows中用作计划任务时不起作用。这部分永远不会执行

if (p.HasExited)
{
    // Execute more code
}

似乎找不到调试方法。 我已经被困在这个项目上一个星期了。

2 个答案:

答案 0 :(得分:1)

如果你假设一旦p.HasExited为真,那么你的代码会更简单。然后,您可以删除if语句。然后我只剩下三种方式可以看到你的代码可以给出你看到的结果:

  1. 第二个过程永不退出。你能在任务管理器中看到它吗?
  2. 您的代码会抛出异常。你在某处记录异常吗?
  3. 第二个进程退出,但从未报告HasExited。
  4. 你能先尝试调查并消除1和2吗?最好先看看简单的替代方案。

    更新:根据评论,Andrew Keith还建议代码可能根本没有被执行。自由插入日志语句,以便您可以准确地看到正在发生的事情。例如,记录到文件。

答案 1 :(得分:0)

我的猜测是与计划任务正在运行的用户的安全相关问题。即:程序可以正常工作,但作为计划任务用户,不允许执行“program.exe”(或者更糟糕的是,你编程)。

您可以检查任务计划程序日志(在任务计划程序控制面板中 - >高级菜单)。它应该为您的任务提供退出代码为零(或者可能是一个)。如果你得到一个非常大的退出代码,那就不对了。

哦,Process.WaitForExit()可能比你的轮询循环更清晰。