Подтвердить что ты не робот

Служба Windows или запланированная задача, какую мы предпочитаем?

Если нам нужно написать программу, которая работает периодически, каким образом мы предпочитаем? Написание службы Windows или создание консольного приложения, которое работает как запланированное задание?

4b9b3361

Ответ 1

Я бы предложил запустить процесс как запланированную задачу, если можно, и написать службу, только если вам нужно. Службы довольно сложно писать (правильно), и если вы выполняете свой процесс по расписанию любого типа, вам гораздо лучше использовать планировщик окон, чем пытаться создать собственный планировщик (в пределах servce).

  • Планировщик задач Windows более эффективен, чем ваш планировщик собственного производства.
  • Планировщик задач Windows предлагает ряд опций, которые вы почти наверняка не будете пытаться реплицировать, но могут быть полезны позже
  • Если вы создадите службу, вам придется перекомпилировать программу, если вы хотите изменить логику, определяющую, какие условия для выполнения задачи находятся. Если вы используете планировщик, вы просто переворачиваете некоторые параметры и выполняете его.

Если вы пытаетесь решить, между двумя, то, очевидно, использование планировщика заданий является жизнеспособным вариантом. И если использование планировщика заданий является жизнеспособным вариантом, то создание службы почти наверняка является неправильным выбором.

Ответ 2

Зависит от того, насколько регулярным он вам нужен.

Если это то, что нужно запускать каждые 60 секунд в течение всего дня, я бы пошел с Windows Service.

Если это что-то, что нужно запускать только один раз в день, я бы пошел с запланированной задачей

Все, что посередине... используйте свое мнение:)

Ответ 3

Начните с консольного приложения. Отделите логику, которая будет сидеть внутри цикла loop-process-sleep, тогда вы можете легко переключаться между ними - даже в том же EXE.

Я сделал это. Мы могли бы назвать:

ourservice.exe -console

и он просто запустится. Или

ourservice.exe -install

и он будет установлен как служба:)

Я бы заплатил запланированную задачу в 99% случаев. Если вам нужно все время работать, слушать порты, смотреть папку (может быть - можно делать каждые 10 секунд без проблем): тогда сделайте это в службе. Если все, что вы делаете, это проснуться, сделайте некоторую обработку (или нет), а затем снова перейдите в режим сна: используйте планировщик. Это проще, чище (управление памятью, esp, если вы используете COM-объекты, и ДЕЙСТВИТЕЛЬНО, если вы используете MAPI), а опции (еженедельно, но не в то время в 5 вечера) с планировщиком MS лучше, чем вы можете писать в время..... которое не имеет времени, поскольку оно уже существует и является бесплатным

О, и проще отлаживать консольное приложение (планировщик), чем услугу....:) Или кому-нибудь "просто запустите".

Ответ 4

Если это действительно "периодически", я бы пошел с запланированной задачей. Они могут быть настроены для работы на любой желаемой частоте.

Службы (по моему опыту) больше для программ, которые должны реагировать на практически случайные события, такие как файлы, поступающие через FTP, или те, которые должны отслеживать состояние файловой системы или базы данных.

Ответ 5

В качестве альтернативы можно посмотреть quartz.net, если вы хотите, чтобы что-то запускалось периодически. Это предварительно построенная структура, которая позволяет вам планировать задачи и экономить на написании части сервиса самостоятельно.

Ответ 6

Избегайте службы, если вы не должны ее использовать.

Это процесс, который означает, что он работает все время. Грамотное использование системных ресурсов - плохая практика.

Мне лично кажется оскорбительным, что другие люди выполняют свой процесс 24/7 на моем компьютере, когда это совершенно не нужно. Это МОЕ исполнение, которое они используют. Я отключу все ненужные фоновые службы.

Ответ 7

Я думаю, что услуга может быть полезна, если вы хотите использовать WCF или .NET Remoting и иметь клиентские приложения, взаимодействующие с некоторыми службами хоста; в противном случае я согласен с тем, что запланированная задача предпочтительна для службы, если более сложная служба ничего не добавляет.

И @Tom, его утверждение о том, что нужно войти в компьютер для выполнения запланированной задачи, является ложным. Я только что протестировал себя и подтвердил, что задача расписания Windows будет выполняться, даже если вы не вошли в систему (если, конечно, вы не выберите вариант, когда задача выполняется только во время входа в систему).

Ответ 8

Это зависит от того, что вы имеете ввиду периодически? Каждую секунду, каждую минуту, каждый час, каждый день?

Я бы сказал, что чем более частая задача должна выполняться, тем более предпочтительной является служба Windows.

Ответ 9

"Это зависит", но я обычно предпочитаю запланированные задачи, для простоты:

  • Вам не нужно добавлять в программу какой-либо программный код шаблона.
  • Ваша программа может быть запущена из командной строки для устранения неполадок (для этого вам придется использовать ключи командной строки в своей сервисной программе).

Если это более или менее одно, и что-то, что вы будете устанавливать и контролировать самостоятельно, запланированная задача, вероятно, хорошая идея.

Для чего-то, что должно иметь представление о готовом продукте, и клиент должен установить себя, я бы пошел с сервисом Windows.

И расписание также является проблемой. Минимальное расписание для запланированной задачи - одна минута. Все, что ниже этого, вам либо нужно использовать службу Windows, либо построить цикл в вашей работе.

Ответ 10

Я бы подумал, что это также будет зависеть от того, можете ли вы оставить компьютер включенным или нет. Я обнаружил, что Запланированная задача Windows не может работать, если только пользователь, создавший задачу, не войдет в систему. Если компьютер не может войти в систему, программа должна запускаться как служебная программа Scheduled Task.