web-dev-qa-db-ja.com

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

私は自分のマシンで毎時間実行するデーモンプロセスを持っています。Hiddenボックスをオンにしても動作しません。Task Properties

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

enter image description here

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

41
Joshua Frank

さて、さらに調査を重ねた後、StackOverflowで this answer を見つけました:

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

コメント は、これによりタスクに完全な権限が付与されることを示しています。

それでも、それができない場合、Hiddenは何をしますか?そして、プログラムを実行しているユーザーアカウントが、それが表示されているかどうかに関係があるのはなぜですか。

19
Joshua Frank

[ユーザーがログオンしているかどうかにかかわらず実行する]チェックボックスをオンにすると、実行可能ファイルがバックグラウンドで実行されます。

51
Fern

Windows 7のスケジュールされたタスクが非表示になっているのはなぜですか? これが発生する理由を説明する必要があります。

また、 このTechNetの説明(一般的なタスクプロパティ は次のように述べています。

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

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

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

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

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

21
Karan

究極のソリューション

  • タスクを実行しているユーザーをSYSTEMに変更すると、ユーザーの下ではなくコマンドが実行されます
  • 「ユーザーがログオンしているかどうかを実行する」のチェック-タスクでパスワードを保存する必要があり、次回のパスワード変更(通常、エンタープライズ環境のドメインポリシーによって適用されるもの)を隠します

それらがあなたにとって取引ブレーカーである場合、最終的な解決策は、以下のようなJSスクリプトファイルを作成することです。これにより、非表示ウィンドウでコマンドが実行され、コマンドが終了してエラーコードが返されるのを待ちます。

WScript.CreateObject("WScript.Shell")
.Run('powershell -File C:\\Path\\To\\MyScript.ps1', 0,true);

これをjsファイル(myjob.js)として保存し、タスクスケジューラに追加します。 enter image description here 楽しむ

11
Philipp Munin

「ユーザーがログオンしているかどうかにかかわらず実行する」では、非表示のオプションが機能します。これを選択した後、資格情報を提供する必要があることに注意してください。

2
Tran Viet Cuong

両方とも :

  • タスクを実行しているユーザーをSYSTEMに変更します」
  • 「ユーザーがログオンしているかどうかを実行する」をチェックします

は黒いコマンドウィンドウを防ぎますが、欠点に注意してください。Windowsがヘッドレススタイルの環境でタスクを起動するため、PowerShellの 'AutoIt'やSendKeysなどの一部のGUI自動化ツールでは作業できません。

1
Gabriel Glenn

デフォルト設定のままにして、ウィンドウを表示せずに実行を生成する短いカスタムプログラムを作成します。たとえば、コマンドプロンプトウィンドウをポップアップせずにバッチファイルを実行するには、次のコードを使用します。 「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());
        }
    }
}
1
AresAvatar

Powershellのスケジュールされたタスク(GPOを介して展開していた)でこの問題が発生していました。私はそれをコマンドウィンドウでラップすることになりました:

CMD
/Q /D /C "powershell.exe -Command "& '\\MYDOMAIN\netlogon\MyPowerShellScript.ps1'""
0
Berwin22