我有一个程序执行另一个程序,主程序在该程序完成后继续。
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
}
似乎找不到调试方法。 我已经被困在这个项目上一个星期了。
答案 0 :(得分:1)
如果你假设一旦p.HasExited为真,那么你的代码会更简单。然后,您可以删除if语句。然后我只剩下三种方式可以看到你的代码可以给出你看到的结果:
你能先尝试调查并消除1和2吗?最好先看看简单的替代方案。
更新:根据评论,Andrew Keith还建议代码可能根本没有被执行。自由插入日志语句,以便您可以准确地看到正在发生的事情。例如,记录到文件。
答案 1 :(得分:0)
我的猜测是与计划任务正在运行的用户的安全相关问题。即:程序可以正常工作,但作为计划任务用户,不允许执行“program.exe”(或者更糟糕的是,你编程)。
您可以检查任务计划程序日志(在任务计划程序控制面板中 - >高级菜单)。它应该为您的任务提供退出代码为零(或者可能是一个)。如果你得到一个非常大的退出代码,那就不对了。
哦,Process.WaitForExit()可能比你的轮询循环更清晰。