Windows 7 タスク スケジューラの隠し設定が機能しない

Windows 7 タスク スケジューラの隠し設定が機能しない

マシン上で 1 時間ごとに実行するデーモン プロセスがあり、Hiddenボックスをチェックしても動作しません。タスクのプロパティ

1 時間ごとにタスクが実行されますが、.NET コンソール アプリが実行中の黒いコマンド ウィンドウが表示されます。これはタスクが完了するまで表示されたままで、その後消えます。これは非常に煩わしいもので、ポップアップ表示されて、何をしているときでも中断されます。

ここに画像の説明を入力してください

本当に隠したいのですが、どうすれば修正できますか?

答え1

「ユーザーがログオンしているかどうかに関係なく実行する」チェックボックスをオンにすると、実行可能ファイルがバックグラウンドで実行されます。

答え2

Windows 7 のスケジュールされたタスクが非表示で実行されているのはなぜですか?なぜこのようなことが起こるのかを説明する必要があります。

また、このTechNetの説明一般的なタスクプロパティ状態:

タスクの一般的なプロパティは、[タスクのプロパティ] または [タスクの作成] ダイアログ ボックスの [全般] タブに表示されます。タスクの一般的なプロパティには、タスク名、作成者、説明、セキュリティ オプション、タスクが構成されているオペレーティング システムなどが含まれます。タスクを非表示にするかどうかを制御するプロパティ

タスク フォルダーにタスクを作成するときは、タスクに名前を付ける必要があります。同じタスク フォルダー内にある 2 つのタスクに同じ名前を付けることはできません。タスクの説明はオプションです。

タスク セキュリティ オプションは、タスクが実行されるセキュリティ コンテキストを指定します。詳細については、「タスク セキュリティ コンテキスト」を参照してください。

デフォルトでは、非表示のタスクはタスク スケジューラのユーザー インターフェイスに表示されません。非表示のタスクは、[表示] メニューで [非表示のタスクの表示] を選択すると表示できます。タスクを非表示にするには、[タスクのプロパティ] または [タスクの作成] ダイアログ ボックスの [全般] タブで [非表示] チェック ボックスをクリックします。

これはチェックボックスが非表示になるだけを意味しているのではないでしょうかタスク自体スケジュールされた実際のプログラムではなく、スケジューラの UI からですか?

答え3

さて、さらに調べてみたところこの答えStackOverflow で:

スケジュールされたタスクをバックグラウンドで実行するように設定するには、タスクを実行するユーザーを SYSTEM に変更します。画面には何も表示されません。

コメントこれによってタスクに対する完全な権限が付与されることを指摘します。これは煩わしいかもしれませんが、この場合は許容されます。

しかし、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());
        }
    }
}

関連情報