Windows用のスケジュールされたタスクの開発
-
05-07-2019 - |
質問
C#.netを使用して、1日1回実行する必要があるアプリケーションを開発する必要があります。最大1分間しか実行されないため、Windowsサービスの開発はやり過ぎであり、スケジュールされたタスクが適切な方法です。
ただし、アプリケーションがどのように結果を伝えることができるかについて、いくつか質問があります:
- タスクが失敗したことをタスクスケジューラに示す方法これはプログラムの終了コード経由ですか?
- 出力情報を記録するにはどうすればよいですか?コンソール出力は自動的にキャプチャされますか、イベントビューアに明示的に書き込む必要がありますか?
解決
質問への回答-
-
未チェックの例外をスローしたためにタスクが失敗した場合、Shedled Taskビューアに
0xe0434f4d
のような値を持つ「最後の結果」が表示されます。または、スケジュールされたタスクビューアーの[最終結果]列にも表示される終了コードを返す場合。 -
コンソールへの書き込み。
Console.WriteLine(" blah");
はどこにも表示されません。イベントログまたはログファイルに書き込む必要があります。
他のヒント
ログファイルの方法を使用する場合、 Console.WriteLine(" blah");
を引き続き使用できます。トリックは、標準の Out および Error ストリームをリダイレクトすることです:
StreamWriter mylog = new StreamWriter("mylog.log");
Console.SetOut(mylog);
Console.SetError(mylog);
ログファイルに最新の情報が含まれていることを確認するには、バッファを頻繁にフラッシュする必要もあります。
Console.Out.Flush();
これは手っ取り早くて汚いので、本当に Windowsイベントログまたはを使用する必要があります。 log4net 。
スケジューラはプロセスを開始するだけです。イベントログまたは別のログシステムを使用して、後で参照する必要がある情報を記録できます。
Log4net は、非常に優れた完全なロギングフレームワークです。強くお勧めできます。
所属していません StackOverflow