簡體   English   中英

任務計划程序中的.NET進程

[英].NET processes in Task Scheduler

我有一個程序可以執行另一個程序,該程序完成后主程序會繼續執行。

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
}

似乎找不到一種調試方法。 我已經在這個程序上停留了一個星期。

如果您假設p.HasExited一旦成立,它將保持這種狀態,那么您的代碼會更簡單。 然后,您可以刪除if語句。 然后,只有三種剩余的方式可以看到您的代碼可以提供您看到的結果:

  1. 第二個進程永不退出。 您可以在任務管理器中看到它嗎?
  2. 您的代碼引發異常。 您是否在某處記錄異常?
  3. 第二個進程退出,但是從不報告HasExited。

您可以先調查並消除1和2嗎? 首先考慮簡單的選擇是一個好主意。

更新:從評論中,安德魯·基思(Andrew Keith)還建議可能根本不執行該代碼。 隨意插入日志語句,以便您可以確切地了解發生了什么。 例如登錄到文件。

我的猜測是與計划任務運行時的用戶有關的安全性問題。 即:該程序可以像您一樣正常運行,但是作為計划任務的用戶,它不允許執行“ program.exe”(更糟糕的是,您要編程)。

您可以檢查任務計划程序日志(在任務計划程序控制面板->高級菜單中)。 它應該為您的任務提供一個退出代碼,為零(或可能為一)。 如果您獲得非常大的退出代碼,那是不對的。

哦,Process.WaitForExit()可能比輪詢循環更干凈。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM