запуск приложения как службы windows

Запуск приложения как службы Windows

Если нам необходимо запустить обыкновенное приложение в качестве службы Windows, то у нас есть как минимум два способа это сделать. Во первых есть утилиты Srvany & Instsrv из Resouce Kit, в во вторых есть очень интересное приложение под названием Non-Sucking Service Manager, которая является свободным программным обеспечением с открытым кодом может работать в операционных системах Microsoft, начиная с Windows 2000 и заканчивая Windows 8. При этом NSSM не требует установки, а взять ее можно на официальном сайте nssm.cc. Рассмотрим чуть подробнее оба способа запуска приложения в качестве службы Windows.

Способ первый – Srvany & Instsrv.

Для начала стоит убедится, что вы работаете под учетной записью администратора, в этом случае у вас не только достаточно прав для любых действий, но и созданная под этим аккаунтом служба будет продолжать работать под остальными учетными записями. Далее, копируем файлы instsrv.exe и srvany.exe в папку system32. Запyскам из командной стpоки следующую команду:

instsrv MyService c:полный_пyтьsrvany.exe (здесь MyService это указанное вами имя вновь созданной службы). Теперь, для конфигурирования службы, идем в «Панель управления», затем в раздел «Администрирование» и затем в раздел «Службы», здесь мы находим свой созданный сеpвис и щёлкаем на нём 2 pаза левой кнопкой мыши.

В появившемся окне свойств отмечаем, каким способом наша служба бyдет запyскаться: Automatic – бyдет запyскаться автоматически пpи загpyзке Windows, Manual – бyдет запyскаться только, когда вы ее запустите вpyчнyю, Disabled – не бyдет запyскаться вообще. Если нужно, чтобы запущенная служба взаимодействовала с вашим рабочим столом, то отметьте чек-бокс «Allow Service to Interact with Desktop». Теперь мы запускаем редактор реестра в ветке:

HKLM SYSTEM CurrentControlSet Service Имя_Вашей_службы

создаёте ключ с названием «Parameters» (без кавычек) и задаете для него значение «Application» (без кавычек) типа REG_SZ в котором указываете полный пyть к исполняемомy файлy, который стартует как служба. Осталось перезагрузить компьютер или запустить службу вручную.

Способ второй – Non-Sucking Service Manager.

Открываем командную строку (конечно, с правами администратора) и переходим в папку, в которую мы предварительно распаковали NSSM. Здесь мы вводим команду

nssm install наша_служба

в результате выполнения команды откроется окно инсталлятора NSSM. Для того, чтобы создать службу, нам достаточно в поле Path указать путь к исполняемому файлу и нажать кнопку «Install service». Кроме того, в поле Options мы можем указать ключи, если они необходимы для запуска службы.

Теперь перейдем к настройке некоторых дополнительных параметров. На вкладке «Shutdown» перечислены методы остановки, которые используются при штатном завершении работы службы или аварийной остановке приложения. Стоит оставить все галочки, поскольку для разных приложений срабатывают разные методы.

Далее, при настройках по умолчанию в случае падения службы, NSSM пытается снова запускать ее, но на вкладке «Exit actions» можно указать, какое действие будет выполняться в случае нештатного завершения работы приложения и выставить задержку перед автоматическим перезапуском приложения. На вкладке «Environment» мы можем задать для службы новые переменные окружения, или же переопределить существующие.

На тот случай, если мы хотим не пользоваться графической оболочкой, можно сразу создать службу из командной строки командой:

Для удаления службы вводим команду:

nssm remove наша_служба

и подтверждаем ее удаление, если ввести команду:

nssm remove notepad confirm

то и подтверждение запрашиваться не будет.

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

запуск приложения как службы windowsзапуск приложения как службы windowsзапуск приложения как службы windowsзапуск приложения как службы windows запуск приложения как службы windows(Пока оценок нет)

Источник

Пилим свою службу Windows – руководство для «не настоящих программистов»

запуск приложения как службы windows

Однажды вы задумаетесь, как превратить скрипт или приложение в Windows-службу. Скорее всего, задача окажется не такой уж тривиальной – приложению как минимум потребуется специальный интерфейс для получения команд от системы. А раз есть требования и ограничения, то есть и скрипты, и милые сердцу костылики для преодоления.

Статья будет полезна тем, кто, как и я — «программист не настоящий».

Зачем нужна служба, если есть назначенные задания

В отличие от назначенных заданий служба работает постоянно, запускается при старте ПК и может управляться средствами Windows. А еще регулярно запускаемому скрипту могут понадобиться данные с предыдущего запуска, и может быть полезно получение данных из внешних источников — например, в случае TCP или Web сервера.

Лично мне за последние пять лет приходилось создавать службу три с половиной раза:

Для создания службы можно использовать взрослые языки программирования вроде C. Но если вы не хотите связываться с Visual Studio, то возьмите готовые утилиты. Существуют платные решения вроде FireDaemon Pro или AlwaysUp, но мы традиционно сосредоточимся на бесплатных.

Способ первый. От Microsoft

Этот уже немолодой механизм состоит из двух компонентов: утилиты instsrv.exe для установки сервиса и srvany.exe — процесса для запуска любых исполняемых файлов. Предположим, что мы создали веб-сервер на PowerShell при помощи модуля Polaris. Скрипт будет предельно прост:

запуск приложения как службы windows
Работа так называемого «сервера».

Теперь попробуем превратить скрипт в службу. Для этого скачаем Windows Resource Kit Tools, где будут наши утилиты. Начнем с того, что установим пустой сервис командой:

Где WebServ — имя нашего нового сервиса. При необходимости через оснастку services.msc можно задать пользователя, под которым будет запускаться служба, и разрешить взаимодействие с рабочим столом.

Теперь пропишем путь к нашему скрипту при помощи магии реестра. Параметры службы есть в разделе реестра HKLM\SYSTEM\CurrentControlSet\Services\WebServ. В нем нам нужно добавить новый раздел Parameters и создать там строковый параметр Application, указав в нем путь к исполняемому файлу. В случае скрипта PowerShell он будет выглядеть так:

запуск приложения как службы windows
Настроенная служба.

Можно запустить и радоваться.

запуск приложения как службы windows
Работающая служба.

Однако у этого способа есть недостатки:

Поэтому перейдем к методу, частично лишенному этих проблем.

Способ второй, почти взрослый

Существует утилита под названием NSSM — Non-Sucking Service Manager, что можно перевести как не-плохой менеджер служб. В отличие от предыдущей, она поддерживается разработчиком, и исходный код опубликован на сайте. Помимо обычного способа, доступна и установка через пакетный менеджер Chocolately.

Создать сервис можно из обычной командной строки, вооружившись документацией на сайте разработчика. Но мы воспользуемся PowerShell. Потому что можем, разумеется.

запуск приложения как службы windows
Установка через PowerShell.

Для разнообразия проверим работу службы не браузером, а тоже через PowerShell командой Invoke-RestMethod.

запуск приложения как службы windows
И вправду работает.

В отличие от srvany, этот метод позволяет перезапускать приложение на старте, перенаправлять stdin и stdout и многое другое. В частности, если не хочется писать команды в командную строку, то достаточно запустить GUI и ввести необходимые параметры через удобный интерфейс.

GUI запускается командой:

запуск приложения как службы windows
Настроить можно даже приоритет и использование ядер процессора.

Действительно, возможностей куда больше, чем у srvany и ряда других аналогов. Из минусов бросается в глаза недостаточный контроль над всем процессом.

Налицо нехватка «жести». Поэтому я перейду к самому хардкорному методу из всех опробованных.

Способ третий. AutoIT

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

Итак, попробуем «завернуть» в нее наш веб-сервис:

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

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

Для этого скрипт необходимо скомпилировать в .exe, а затем установить службу, запустив exe с ключом -i.

запуск приложения как службы windows
Оно работает!

Разумеется, этот способ не самый удобный, и все дополнительные возможности придется реализовывать самостоятельно, будь то повторный запуск приложения при сбое или ротация логов. Но зато он дает полный контроль над происходящим. Да и сделать в итоге можно куда больше — от уведомления в Telegram о сбое службы до IPC-взаимодействия с другими программами. И вдобавок — на скриптовом языке, без установки и изучения Visual Studio.

Расскажите, а вам приходилось превращать скрипты и приложения в службы?

Источник

.NET Core Workers как службы Windows

запуск приложения как службы windows

Создание worker

Примечание. В наших предварительных версиях шаблон worker находится в том же меню, что и веб-шаблоны. Это изменится в будущем выпуске. Мы намерены разместить шаблон Worker Service непосредственно в мастере создания нового проекта.

Создание Worker в Visual Studio

запуск приложения как службы windows

запуск приложения как службы windows

запуск приложения как службы windows

Создание Worker в командной строке

Выполните dotnet new worker

запуск приложения как службы windows

Запуск в виде службы Windows

Добавить пакет NuGet Microsoft.Extensions.Hosting.WindowsServices

запуск приложения как службы windows

Добавить вызов UseServiceBaseLifetime к HostBuilder в Program.cs

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

Установка Worker

Как только мы получили worker использовав ServiceBaseLifetime нам нужно установить его:

Во-первых, давайте опубликуем приложение. Мы установим Службу Windows in-place, что означает, что исполняемый файл будет заблокирован при каждом запуске службы. Публикация — это хороший способ убедиться, что все файлы, необходимые для запуска службы, находятся в одном месте и готовы к установке.

Далее можно использовать sc utility в командной строке администратора

запуск приложения как службы windows

Примечание о безопасности: Эта команда запускает службу как локальную систему, которая не является тем, что нужно. Вместо этого вы должны создать service account и запустить службу Windows в качестве этой учетной записи. Мы не будем говорить об этом здесь, но здесь есть некоторая документация по ASP.NET: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-2.2

Логирование

У системы логирования есть сервис «Event Log», который может отправлять сообщения логов непосредственно в журнал событий Windows. Чтобы войти в журнал событий, вы можете добавить Microsoft.Extensions.Logging.EventLog пакет, а затем изменить ваш Program.cs :

Дальнейшая работа

В следующих предварительных версиях мы планируем улучшить использование Workers с Windows Services:

Источник

Как запустить приложение в виде службы Windows

Создание службы

Для создания службы с именем notepad запускаем командную консоль, переходим в папку с распакованным NSSM (для 64-разрядной Windows) и вводим команду nssm install notepad, которая открывает окно графического инсталлятора NSSM. Чтобы создать службу, достаточно в поле Path указать путь к исполняемому файлу и нажать кнопку «Install service». Дополнительно в поле Options можно указать ключи, необходимые для запуска службы.

запуск приложения как службы windows

Также на этапе создания новой службы можно указать некоторые дополнительные параметры.

На вкладке «Shutdown» перечислены методы остановки и таймауты, используемые при штатном завершении работы или аварийной остановке приложения. Когда NSSM получает команду остановки (напр. при завершении работы приложения), то он пытается остановить контролируемое приложение штатным образом. Если же приложение не отвечает, то NSSM может принудительно завершить все процессы и подпроцессы этого приложения.

Всего есть четыре этапа завершения работы приложения, и по умолчанию они будет использоваться в таком порядке:

• На первом этапе NSSM пытается сгенерировать и отправить событие Ctrl+C. Этот способ хорошо работает для консольных приложений или скриптов, но не применим для графических приложений;
• Затем NSSM определяет все окна, созданные приложением, и посылает им сообщение WM_CLOSE, инициирующее выход из приложения;
• Третьим этапом NSSM вычисляет все потоки, созданные приложением, и отправляет им сообщение WM_QUIT, которое будет получено если приложение имеет очередь сообщений потока;
• И в качестве последнего средства NSSM может вызвать метод TerminateProcess(), принудительно завершив работу приложения.

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

запуск приложения как службы windows

По умолчанию при падении службы NSSM пытается рестартовать ее. На вкладке «Exit actions» можно изменить автоматическое действие при нештатном завершении работы приложения, а также выставить задержку перед автоматическим перезапуском приложения.

запуск приложения как службы windows

На вкладке «Input/Output (I/O)» можно задать перенаправление ввода\вывода приложения в указанный файл.

запуск приложения как службы windows

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

запуск приложения как службы windows

Также можно не пользоваться графической оболочкой и сразу создать службу в консоли такой командой:

nssm install notepad ″C:\Windows\system32\notepad.exe″

Управление службой

После создания службы с помощью NSSM зайдем в оснастку Services и найдем службу notepad. Как видите, с виду она ничем не отличается от остальных служб, мы также можем ее запустить, остановить или изменить режим запуска. Однако обратите внимание, что в качестве исполняемого файла указан nssm.exe.

запуск приложения как службы windows

А если зайти в Task Manager, то мы увидим следующую картину: в качестве основного (родительского) процесса запущен NSSM, служба notepad запущена как его дочерний процесс, и уже в этом дочернем процессе запущено приложение Блокнот.

запуск приложения как службы windows

Удаление службы

Для удаления службы вводим команду nssm remove notepad и подтверждаем ее удаление. А введя команду nssm remove notepad confirm, можно обойтись и без подтверждения.

запуск приложения как службы windows

Запуск службы в интерактивном режиме

Для того, чтобы запустить службу в интерактивном режиме, надо в оснастке Службы открыть ее свойства и на вкладке «Вход в систему» отметить чекбокс «Разрешить взаимодействие с рабочим столом».

запуск приложения как службы windows

А дальше начинаются чудеса запуск приложения как службы windowsДля службы, запущенной в интерактивном режиме, система открывает отдельный изолированный сеанс (session 0). Попасть в этот сеанс можно только при помощи Службы обнаружения интерактивных служб (ui0detect), которая отслеживает запуск интерактивных служб на компьютере и выдает оповещение. В Windows 7\Server 2008 эта служба активна по умолчанию, а в Windows 8\Server 2012 она отключена и не отображается в графической оснастке Службы (по крайней мере я ее там не нашел). Более того, если вы все же найдете эту таинственную службу и попробуете ее запустить, то получите сообщение об ошибке.

запуск приложения как службы windows

После чего открываем консоль PowerShell и стартуем службу обнаружения командой:

запуск приложения как службы windows

Убедившись что служба обнаружения запущена, рестартуем службу notepad, и получаем вот такое окошко. Выбираем пункт «Посмотреть сообщение»

запуск приложения как службы windows

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

запуск приложения как службы windows

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

Источник

Devetime

запуск приложения как службы windows

Программа как служба или как превратить любую программу в службу на Windows

Папки:
scr – папка с исходниками программы, вдруг вы захотите покапаться во внутренностях программы или переделать ее под себя.
win32 – папка с программой рассчитанной под операционную систему windows разрядностью 32 бита.
win64 – папка с программой рассчитанной под операционную систему windows разрядностью 64 бита.

Файлы:
ChangeLog.txt – файл с описанием изменений каждой версии программы.
README.txt – файл с описанием программы.

Теперь, когда мы познакомились с содержимым архива, приступим к установке. В зависимости от разрядности вашей системы 32/64 бита, выбираем папку с программой.(Если у вас разрядность системы 32 бита то выбираем win32, если 64 то win64). Переносим эту папку в корень диска с операционной системой(Желательно), и запускаем командную строку(Вызвать ее можно комбинацией клавиш Win+R, и в сплывающем окне набрать cmd и нажать OK)
запуск приложения как службы windows
запуск приложения как службы windows

Откроется командная строка,и в ней набираем команду cd и путь к программе nssm. Например:

Далее набираем команду – nssm install + имя будущей службы. Например:

И перед нами предстает окно программы nssm.

запуск приложения как службы windows

Расскажу коротко о настройках которые нам потребуются.

Path – в этом поле указываем путь к программе которую мы хотим переделать в службу(Обязательно).
Startup directory – директория нахождения программы(Обязательно).
Arguments – дополнительные параметры запуска программы(Не обязательно).
Service name – наименование будущей службы(Можно назвать как угодно, хоть MEGASLUZBA).

На этом в принципе все, дополнительных настроек не требуется.
После всех настроек нажимаем кнопку install service и запускаем диспетчер задач и наблюдаем нашу службу.
запуск приложения как службы windows
Перезагрузите компьютер, или запустите службу вручную из диспетчера задач. (Правой кнопкой мыши по службе – запустить)

P.S.на всякий случай,если у вас не работает стабильно ваша программа, то в разделе process, уберите галочку Console Windows.
запуск приложения как службы windows

Что бы внести изменения в вашу службу, запустите командную строку и введите команду: nssm edit + название вашей службы

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *