Разработка запланированной задачи для Windows

Мне нужно разработать приложение, использующее С#.net, которое нужно запускать один раз в день. Он работает не более одной минуты, поэтому разработка службы Windows является чрезмерной, и запланированная задача является подходящим способом.

Однако у меня есть несколько вопросов о том, как приложение может сообщить свои результаты:

  • Как указать планировщику задач, что задача не выполнена? Это через код выхода программы?
  • Как регистрировать выходные данные? Является ли вывод консоли автоматически захваченным или мне нужно явно писать в средство просмотра событий?

Ответ 1

В ответ на ваши вопросы -

  • Если задача завершилась неудачно, потому что она исключила исключение, вы увидите, что в средстве просмотра Sheduled Task появится "Last Result" со значением, что-то вроде 0xe0434f4d. Альтернативно, если вы вернете код выхода, который также будет отображаться в столбце "Последний результат" средства просмотра запланированной задачи.

  • Запись на консоль, например. Console.WriteLine("blah"); нигде не появится. Вам нужно будет записать в журнал событий или в файл журнала.

Ответ 2

Если вы переходите к файлу журнала, вы все равно можете использовать Console.WriteLine("blah");. Хитрость заключается в перенаправлении стандартных потоков Out и Error:

        StreamWriter mylog = new StreamWriter("mylog.log");
        Console.SetOut(mylog);
        Console.SetError(mylog);

Вам также необходимо регулярно очищать буферы, чтобы файл журнала содержал текущую информацию.

            Console.Out.Flush();

Это быстро и грязно, вы действительно должны использовать журнал событий Windows или log4net.

Ответ 3

AFAIK планировщик просто запускает процесс. Вы можете использовать журнал событий или другую систему ведения журнала для записи информации, необходимой для дальнейшего использования.

Ответ 4

Log4net - очень хорошая, полная структура ведения журнала. Я могу очень рекомендовать его.