Windows запуск exe как служба

Какой командой можно запустить обычное приложение, как службу Windows?

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

4 ответа 4

Есть программа обертка для таких целей: https://github.com/kohsuke/winsw По сути она просто запустит приложение с нужными параметрами. При остановке службы опять же запустит его, с другими параметрами. Права у приложения будут LOCAL_SYSTEM, но это можно изменить в свойствах службы.

Можно через консоль, т.е создаешь внутри программы процесс консоли и посылаешь ему что-то типа этого:

Служба так же автоматом добавится в автозапуск.

Еще есть Installutil, но если не ошибаюсь, то у него меньше возможностей чем у SC.

Есть такая программка — XyNtService с исходниками.

Я ее допиливал. Здесь исправленная и улучшенная версия (с исходниками).

На OneDrive — там два файла: XYNTServiceProject_src.zip и XYNTServiceProject_v03.zip

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

Можно сделать простую службу, которая будет запускать и контролировать произвольное приложение, указанное в параметрах например. Чтобы не сильно страдать при создании службы, можно воспользоваться, например, TopShelf, который доступен из NuGet, и свести работу к минимуму.

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

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

Можно ли запустить клиентское приложение в качестве службы? В одной из статей я описывал способы создания службы Windows штатными средствами ОС. Однако не каждое консольное приложение сможет запуститься как служба, а программы с графическим интерфейсом в принципе не умеют работать подобным образом. Но возможность запустить приложение как службу все же есть, и поможет нам в этом программа с оригинальным названием Non-Sucking Service Manager.

NSSM представляет из себя свободное программное обеспечение с открытым кодом и поддерживает все операционные системы Microsoft, начиная с Windows 2000 и заканчивая Windows 8. NSSM не требует установки, достаточно его загрузить и распаковать. В дистрибутив входят версии для 32- и 64-разрядных ОС. Взять программу можно с сайта nssm.cc, на данный момент последняя стабильная версия 2.21.1, которую я и буду использовать.

Для демонстрации возможностей NSSM попробуем запустить Блокнот Windows в качестве службы на Windows 8.1.

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

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

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

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

Читайте также:  Калибровка монитора lenovo windows 10

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А дело в том, что для ее запуска необходимо разрешить запуск интерактивных служб на компьютере. Поэтому открываем редактор реестра, находим в разделе HKLM\System\CurrentControlSet\Control\Windows параметр типа DWORD с именем NoInteractiveServices и ставим его значение в 0.

Читайте также:  Winrar 64 bit windows 10 установка

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

Start-Service -Name ui0detect

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

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

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

Devetime

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

Рано или поздно, у простого пользователя или прожженого сисадмина возникает такая ситуация как: “Превратить программу в службу”. Зачем это нужно, и в чем отличие. Если сильно не вдаваться в подробности то слушайте. Служба – это такое приложение , которое автоматически запускается при старте Windows, и работает в фоновом режиме. Сразу же поясняю что к чему. По поводу автозапуска – не всегда пользователю требуется запуск службы автоматически со стартом системы, это всегда можно изменить и настроить как вам нужно. По поводу фоновой работы – эта такой способ работы приложения, при котором оно не взаимодействует с рабочем столом, т.е. не отображается.(Тихо и незаметно работает на своем месте) Столкнулся я с такой проблемой при подключении к базе данных 1С через Публикатор (Аналог 1С Линк) развернутый на Windows server 2012. Все было отлично, программа работала и тихо раздавала базы, но случился маленький ньюанс. После выхода из пользователя , под которым была запущена программа, базы перестали раздаваться т.к. Публикатор завершил свою работу. Что же делать? Было решено сделать из программы Публикатор” – службу. Тогда программа сможет работать постоянно, независимо от того, какой пользователь запущен. Сейчас я вам покажу, как просто, без каких либо крутых навыков превратить почти любую программу в службу. Во первых, нам потребуется программа под названием NSSM расшифровывается как Non-Sucking Service Manager. Скачать ее можно на официальном сайте: Ссылка на сайт Программы Прямая ссылка на скачивание программы : Прямая ссылка на скачку программы Скачав по ссылке, вы получите архив, внутри которого находиться:

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

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

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

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

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

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

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

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

Читайте также:  Windows hello не видит сканер отпечатков пальцев

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

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

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

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

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

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

Создание службы с помощью программы Sc.exe

Первый способ позволяет создавать службы, используя утилиты, работающие через командную строку. В данном случае, используется инструмент sc.exe. Он позволяет взаимодействовать с функциями API и выполнять операции со службами Windows 10. Несмотря на то, что данная программа даже не обладает графическим интерфейсом, она является мощным инструментом и может контролировать состояние служб, создавать, редактировать и управлять ими.
Если создавать службу, с помощью sc.exe, то не возникает необходимости в изменении параметров реестра и списка служб в диспетчере. Кроме того, утилита способна работать со службами на локальном компьютере, и выполнять те же действия на удаленных машинах.
Чтобы создать новый сервис, откройте командную строку от имени администратора и запустите команду «Sc create». Она запишет новую службу к базе диспетчера служб. Синтаксис команды представлен следующим образом:

  • ServiceName — данным параметром определяется имя раздела службы в реестре;
    Данное имя не совпадает с тем именем, которое будет отображаться диспетчере (например, в Services).
  • BinPath — в этом параметре записываем путь, где хранится исполняемый файл.

Чтобы было понятнее, в качестве примера, мы создадим службу «MySevice». При этом, отображаемое имя будет «My New Service». Указываем тип службы и включаем автозапуск:

Sc create MyService binPath=C:\MyService\MyService.exe DisplayName=″My New Service″ type=own start=auto

Теперь откройте оснастку «Services» и взгляните на то, что получилось:

Параметры службы, которая уже была создана и запущена, можно изменить при помощи команды Sc config. К примеру, мы заменим имя службы, которое отображается как:

Sc config MyService DisplayName=″My Service″

А еще можно избавиться от службы полным ее удалением. Для этого используйте такую команду:

С помощью утилиты PowerShell

Ну а с помощью такого мощного инструмента, как PowerShell можно хоть горы двигать. Он обладает большими возможностями и способен работать с различными службами. Здесь, для добавления новой службы, существует специальная команда «New -Service». Давайте попробуем новую службу, как и в прошлом примере, будем использовать те же имена и значения, только добавим дополнительный параметр, в виде описания. И так, команда, для создания нового сервиса, выглядит следующим образом:

New-Service -Name MyService -BinaryPathName C:\MyService\MyService.exe` -DisplayName ″My New Service″ -Description ″Very Important Service . ″

Для изменения параметров служб, существует команда «Set -Service»:

Set-Service -Name MyService -Description ″Not Very Important Service″ -StartupType Manual

Если не считать дополнительную возможность добавления описаний к службам, PowerShell обладает таким же функционалом, как и утилита Sc.exe. Но есть один маленький минус — здесь нет простой команды для удаления службы. Поэтому приходиться использовать такой вот, немного мудреный, код:

(Get-WmiObject win32_service -Filter ″name=′MyService′″).delete()

Оцените статью