Windows 7 工作排程器隱藏設定不起作用

Windows 7 工作排程器隱藏設定不起作用

我有一個每小時在我的機器上運行的守護進程,即使我選中了該Hidden框,它也不起作用。任務屬性

該任務每小時運行一次,但它顯示黑色命令窗口,其中正在運行我的 .NET 控制台應用程式。它會一直保持可見,直到任務完成,然後消失。這非常煩人,因為它會彈出並打斷我正在做的事情:

在此輸入影像描述

我真的想隱藏它,那麼我該如何解決這個問題?

答案1

選取「無論使用者是否登入都會執行」複選框,可執行檔將在背景執行。

答案2

為什麼Windows 7排程任務運行被隱藏了?應該解釋為什麼會發生這種情況。

也,此 TechNet 描述常規任務屬性狀態:

任務的常規屬性顯示在「任務屬性」或「建立任務」對話方塊的「常規」標籤上。任務的常規屬性包括任務名稱、作者、描述、安全選項、任務配置的作業系統、以及控制任務是否隱藏的屬性

在任務資料夾中建立任務時,必須為該任務命名。如果兩個任務位於同一任務資料夾中,則它們不能具有相同的名稱。任務描述是可選的。

任務安全選項指定任務運行所在的安全上下文。有關詳細信息,請參閱任務安全性上下文。

預設情況下,隱藏任務不會顯示在任務規劃程式使用者介面中。在「檢視」功能表中選擇「顯示隱藏任務」後,您可以查看隱藏任務。按一下「任務屬性」或「建立任務」對話方塊的「常規」標籤上的「隱藏」複選框即可隱藏任務。

這是否意味著複選框僅隱藏任務本身來自調度程序的 UI,而不是調度的實際程序?

答案3

好吧,經過更多研究我發現這個答案在 StackOverflow 上:

若要將排程任務設定為在背景執行,請將執行該任務的使用者變更為系統,螢幕上將不會顯示任何內容。

一則評論指出這會授予該任務的完全權限,這可能很煩人,但在本例中是可以接受的。

但是,Hidden如果它不這樣做的話,它會做什麼呢?為什麼運行該程式的使用者帳戶與它是否可見有關係?

答案4

我保留預設設定並編寫簡短的自訂程序,在不顯示視窗的情況下產生執行。例如,要執行批次檔而不彈出命令提示字元窗口,請使用下列程式碼。將任務設定為產生「RunBatchFile.exe (path_to_batch_file)」。

class Program
{
    static void Main(string[] args)
    {
        try
        {
            if (args.Length < 1)
            {
                Console.WriteLine("No batch file");
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            if (!File.Exists(args[0]))
            {
                Console.WriteLine("Batch file {0} not found", args[0]);
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            // Set to batch file's folder
            string startIn = Path.GetDirectoryName(args[0]);
            if (!string.IsNullOrEmpty(startIn) && Directory.Exists(startIn))
                Directory.SetCurrentDirectory(startIn);

            // Start
            ProcessStartInfo pi = new ProcessStartInfo()
            {
                FileName = args[0],
                UseShellExecute = true,
                WindowStyle = ProcessWindowStyle.Hidden
            };
            Process.Start(pi);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: " + ex.ToString());
        }
    }
}

相關內容