Я запускаю настольное приложение как службу с помощью NSSM (Non Sucking Service Manager), который представляет собой оболочку для приложений, которые не предназначены для работы как службы, чтобы запускаться как служба.
Я использую старый ноутбук с Windows 10 в качестве сервера, выполняя несколько приложений в качестве служб Windows. На ноутбуке нет ни одного пользователя, вошедшего в систему, поэтому для этого требуется меньше ресурсов, а благодаря службам Windows приложения всегда работают, даже когда Windows устанавливает новые обновления и перезагружается.
Сейчас я бы предпочел, чтобы приложения могли запускаться как службы Windows сами по себе без помощи другого приложения (NSSM), но я знаю, что этого никогда не произойдет. Эти приложения являются настольными приложениями и никогда не предназначены для работы в качестве службы; разработчики никогда не улучшат их такой функцией. (Я это уже спрашивал.)
На самом деле есть альтернатива запуску приложения как службы, и это будет запуск приложения с помощью планировщика задач с триггером «при запуске Windows».
В обоих случаях пользователю не нужно входить в систему, компьютер может автоматически перезагружаться, а приложение всегда должно быть доступно в сети. Преимущество планировщика задач заключается в том, что приложению не требуется оболочка (NSSM).
Но я не совсем уверен в надежности Планировщика заданий. Служба Windows предназначена для круглосуточного запуска приложений и имеет множество вариантов восстановления. Планировщик заданий предназначен для периодического запуска приложения, а не 24/7; поэтому варианта восстановления нет.
Итак, мой вопрос:
Является ли планировщик задач с триггером «при запуске Windows» действительной альтернативой службе Windows или нет?
Есть ли у кого-нибудь опыт использования обоих методов и может ли он лучше объяснить преимущества и недостатки обоих?
Да, в вашем варианте использования это так, однако я понимаю, что обычно планировщик задач ожидает, что задача завершится в какой-то момент (и на самом деле имеет вариант по умолчанию для принудительного завершения задачи, если она не заканчивается сама по себе), и вы можете тестировать некоторые неизвестные произвольные или, по крайней мере, непредвиденные ограничения, запустив ее таким образом. Если вы все же используете запланированную задачу, возможно, лучше будет иметь отдельный запланированная задача для запуска приложения а другой - для остановки (и / или перезапуска) приложения. Вы можете запланировать запуск задачи при запуске Windows и запускать другие задачи через удаленное управление.
Одна область, где это не эквивалентно, - это зависимости служб. Нет встроенного способа сделать запланированную задачу зависимой от выполнения другой, тогда как вы можете сделать это с помощью служб. Другой областью будет регистрация событий. Я подозреваю, что ни один из них не будет полезен в вашем случае использования, потому что многие приложения при необходимости хранят свои собственные журналы и не зависят от запуска других приложений.
У обоих есть варианты восстановления / перезапуска после сбоя.
и оба могут быть настроены на отложенный запуск после запуска.
Я мог бы оставить вам комментарий, потому что 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
Вот пример:
C: \ Documents and Settings \ Administrator> 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.