マシン上で1時間ごとに実行するデーモンプロセスがあり、チェックHidden
ボックスをオンにしても機能しません。
1時間ごとにタスクが実行されますが、.NETコンソールアプリが実行されている黒いコマンドウィンドウが表示されます。これは、タスクが完了するまで表示され続け、その後消えます。これは非常に迷惑です。ポップアップが表示され、実行中の操作が中断されるためです。
私は本当にそれを隠したいのですが、どうすればこれを修正できますか?
マシン上で1時間ごとに実行するデーモンプロセスがあり、チェックHidden
ボックスをオンにしても機能しません。
1時間ごとにタスクが実行されますが、.NETコンソールアプリが実行されている黒いコマンドウィンドウが表示されます。これは、タスクが完了するまで表示され続け、その後消えます。これは非常に迷惑です。ポップアップが表示され、実行中の操作が中断されるためです。
私は本当にそれを隠したいのですが、どうすればこれを修正できますか?
回答:
[ユーザーがログオンしているかどうかに関係なく実行する]チェックボックスをオンにすると、実行可能ファイルがバックグラウンドで実行されます。
Windows 7のスケジュールされたタスクが非表示で実行されているのはなぜですか?これが起こる理由を説明する必要があります。
また、このTechNetの説明一般的なタスクのプロパティの状態:
タスクの一般的なプロパティは、[タスクのプロパティ]または[タスクの作成]ダイアログボックスの[全般]タブに表示されます。タスクの一般的なプロパティには、タスク名、作成者、説明、セキュリティオプション、タスクが構成されているオペレーティングシステム、およびタスクを非表示にするかどうかを制御するプロパティが含まれます。
タスクフォルダーにタスクを作成するときは、タスクに名前を付ける必要があります。同じタスクフォルダにある場合、2つのタスクに同じ名前を付けることはできません。タスクの説明はオプションです。
タスクセキュリティオプションは、タスクを実行するセキュリティコンテキストを指定します。詳細については、「タスクセキュリティコンテキスト」を参照してください。
既定では、非表示のタスクはタスクスケジューラのユーザーインターフェイスに表示されません。[表示]メニューで[非表示のタスクを表示]を選択すると、非表示のタスクを表示できます。[タスクのプロパティ]または[タスクの作成]ダイアログボックスの[全般]タブで[非表示]チェックボックスをクリックすると、タスクが非表示になります。
これは、チェックボックスがスケジュールされている実際のプログラムではなく、スケジューラーのUIからタスク自体を隠すだけであることを意味していませんか?
さて、さらに調査を重ねた結果、StackOverflowでこの答えが見つかりました。
スケジュールされたタスクをバックグラウンドで実行するようにセットアップするには、タスクを実行しているユーザーをSYSTEMに変更すると、画面に何も表示されません。
コメントは、これがタスクに完全な権利を付与することを指摘しています。これは迷惑かもしれませんが、この場合は受け入れられます。
それでも、Hidden
これを行わない場合はどうなりますか?また、プログラムを実行しているユーザーアカウントが、表示されているかどうかに関係があるのはなぜですか?
SYSTEM
アカウントは他のユーザーのEFS暗号化ファイルにアクセスできないことに注意してください。
究極のソリューション
それらがあなたにとっての取引ブレーカーである場合、究極の解決策は、以下のようなJSスクリプトファイルを作成することです。
WScript.CreateObject("WScript.Shell")
.Run('powershell -File C:\\Path\\To\\MyScript.ps1', 0,true);
「ユーザーがログオンしているかどうかに関係なく実行する」を選択すると、非表示のオプションが機能します。これを選択した後、資格情報を提供する必要があることに注意してください。
デフォルト設定のままにして、ウィンドウを表示せずに実行を生成する短いカスタムプログラムを作成します。たとえば、コマンドプロンプトウィンドウを表示せずにバッチファイルを実行するには、次のコードを使用します。「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());
}
}
}
ProcessWindowStyle.Hidden
思います、具体的には正しい部分によるものですか?私はここでそれについて何かを参照してください。msdn.microsoft.com/en-us/library/...
PowerShellのスケジュールされたタスク(GPOを使用して展開していた)でこの問題が発生していました。私はコマンドウィンドウでそれをラップすることになりました:
CMD
/Q /D /C "powershell.exe -Command "& '\\MYDOMAIN\netlogon\MyPowerShellScript.ps1'""