Служба Windows против планировщика заданий с триггером запуска

Служба Windows против планировщика заданий с триггером запуска

Я запускаю настольное приложение как службу с помощью NSSM (Non Sucking Service Manager), который представляет собой оболочку для приложений, не предназначенных для запуска в качестве службы.

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

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

На самом деле существует альтернатива запуску приложения как службы — запуск приложения с помощью планировщика заданий с триггером «при запуске Windows».

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

Но я не совсем уверен в надежности планировщика заданий. Служба Windows предназначена для круглосуточного запуска приложения, и у нее есть много вариантов восстановления. Планировщик заданий предназначен для периодического запуска приложения, а не круглосуточного; поэтому нет никаких вариантов восстановления.

Итак, мой вопрос:

Является ли планировщик заданий с триггером «при запуске Windows» допустимой альтернативой службе Windows или нет?

Есть ли у кого-то опыт использования обоих методов и кто может лучше объяснить преимущества и недостатки каждого из них?

решение1

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

Одна область, где это не эквивалентно, — это зависимости служб. Нет встроенного способа сделать запланированную задачу зависимой от другой для выполнения, тогда как вы можете это сделать с помощью служб. Другая область — это ведение журнала событий. Я подозреваю, что ни один из них не будет полезен в вашем случае использования, поскольку многие приложения ведут собственные журналы при необходимости и не зависят от других приложений для выполнения.

Оба варианта имеют возможность восстановления/перезапуска после сбоя.

восстановление обслуживания

запланированное восстановление задачи

и оба могут быть настроены на отложенный запуск после запуска.

отложенный запуск службы

запланированная задача отложенный запуск

решение2

Я мог бы оставить вам комментарий, потому что Google иногда полезен, но я помню, что когда-то давно я хотел добиться того же самого. В том случае я использовал набор ресурсов для Windows Server 2003. Он содержал инструмент для создания службы. К сожалению, я не нашел информации о том, что я использовал в то время *.

Тем не менее, поиск в Google показывает много результатов:

1) Использованиеsc.exe https://support.microsoft.com/en-us/help/251192/how-to-create-a-windows-service-by-using-sc-exe

https://stackoverflow.com/questions/3663331/when-creating-a-service-with-sc-exe-how-to-pass-in-context-parameters

Вот пример:

C:\Documents and Settings\Администратор> sc create asperacentral binPath= "C:\Program Files\Aspera\Enterprise Server\bin\Debug\asperacentral.exe" DisplayName= "Aspera Central" start= auto

2) Использование *svrany: Это был инструмент, который я использовал, просто вспомнил. Но он уже довольно старый, и я бы не советовал вам его использовать, хотя, я думаю, он все еще работает (с Windows 7 он работает).

3) Использование srvstart.exe: https://www.rozanski.org.uk/software

Инструмент, о котором я недавно слышал, но никогда им не пользовался.

Я уверен, что есть и многие другие, но я бы попробовал sc.exeметод 1.

решение3

Изменение приоритета приложения, которое работает с планировщиком заданий Windows, — сложная задача. Но я не знаю о сервисе.

Связанный контент