Иногда может потребоваться взять исполняемый файл и зарегистрировать его в качестве службы Windows. Для этого есть несколько способов, я обычно пользуюсь двумя из них.
Sc.exe
Для создания и службы из командной строки можно использовать программу SC (Sc.exe). SC представляет из себя утилиту командной строки, которая реализует вызовы ко всем функциям интерфейса прикладного программирования (API) управления службами Windows. С ее помощью можно производить любые действия со службами — просматривать состояние, управлять (запускать, останавливать и т.п.), изменять параметры, а также создавать новые службы.
При создании службы с помощью SC нет необходимости вручную создавать записи в реестре и затем перезагружать компьютер, чтобы обеспечить обновление базы данных диспетчером служб. Также SC позволяет указать имя удаленного компьютера, что дает возможность управлять службами как на локальном, так и на удаленном компьютере.
Для создания нового сервиса запускаем команду Sc create. Она создает запись службы в реестре и в базе данных диспетчера служб. Sc create имеет следующий синтаксис:
sc create [ServiceName] [binPath= ] <параметр1= > <параметр2= >
ServiceName — указывает имя, которое будет присвоено разделу службы в реестре. Имейте в виду, что это имя отличается от отображаемого имени службы (имени, которое отображается в оснастке «Services»);
binPath — указывает путь к исполняемому файлу службы.
Для примера создадим службу MyService, укажем отображаемое имя My New Service, зададим тип службы и поставим ее на авто-запуск:
Sc create MyService binPath=C:MyServiceMyService.exe DisplayName=″My New Service″ type=own start=auto
Затем откроем оснастку «Services» и посмотрим результат.
Изменять параметры уже созданной службы можно командой Sc config. Например, мне не понравилось отображаемое имя службы и я хочу его изменить:
Sc config MyService DisplayName=″My Service″
Ну и полностью удалить службу можно вот так:
Sc delete MyService
PowerShell
PowerShell может почти все 🙂 , в том числе и управлять службами Windows. Создать новую службу можно с помощью командлета New-Service. Создадим такой же сервис, как и в предыдущем примере, только добавим к нему описание (Description):
New-Service -Name MyService -BinaryPathName C:MyServiceMyService.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, разве что позволяет добавить описание. А вот для удаления служб в PS простого способа нет, придется воспользоваться вот такой конструкцией:
(Get-WmiObject win32_service -Filter ″name=′MyService′″).delete()
Поэтому лично я предпочитаю использовать Sc.exe.
- Remove From My Forums
-
Question
-
Years ago, I created a Windows service on a Server 2003 server using srvany from the Resource Kit. Unfortunately, the reskit and srvany.exe are not available options on Server 2012R2. I’ve seen posts on other sites saying that I need to use a third-party
utility to perform this task, or else set it up through the Task Scheduler. Can anyone here point me in the right direction? I’d approciate any help you can provide.
Answers
-
Hi!
Here’s the syntax:
New-Service -Name
«SomeService» -BinaryPathName
«C:some_pathsome_service.exe»There are also other switch regarding dependencies and so forth. You can find more info here:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-service?view=powershell-6
Cheers
Above and Beyond Information Technology
-
Marked as answer by
Thursday, September 6, 2018 8:22 PM
-
Marked as answer by
- Remove From My Forums
-
Question
-
Years ago, I created a Windows service on a Server 2003 server using srvany from the Resource Kit. Unfortunately, the reskit and srvany.exe are not available options on Server 2012R2. I’ve seen posts on other sites saying that I need to use a third-party
utility to perform this task, or else set it up through the Task Scheduler. Can anyone here point me in the right direction? I’d approciate any help you can provide.
Answers
-
Hi!
Here’s the syntax:
New-Service -Name
«SomeService» -BinaryPathName
«C:some_pathsome_service.exe»There are also other switch regarding dependencies and so forth. You can find more info here:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-service?view=powershell-6
Cheers
Above and Beyond Information Technology
-
Marked as answer by
Thursday, September 6, 2018 8:22 PM
-
Marked as answer by
I have created .exe in .net and want to use as a service, run all time on my local machine. I am using windows server 2012. how to setup a service on my local computer.
**You can use windows shell script for create service with commands **
The sc create command performs the operations of the CreateService API function.
Here’s what to do …
-
copy the «yourapplication.exe » to a suitable location on your
Win2012 server (e.g. C:WindowsSystem32 ). -
Use «sc » to create a new service that launches «srvany » (e.g. sc
create «Servicename» binPath= «C:’Windows’System32’srvany.exe»
DisplayName= «My Custom Service» ) -
Using RegEdit : create a «Parameters » key for your service (e.g.
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesServicenameParamaters) -
Using RegEdit : within the newly created «Parameters » key , create
a string value called «Application » and enter the full path to the
application you are wanting to run as a service. (No quotes
required.)
Syntax:-
sc [] create [] [type= {own | share | kernel | filesys | rec | interact type= {own | share}}] [start= {boot | system | auto | demand | disabled}] [error= {normal | severe | critical | ignore}] [binpath= ] [group= ] [tag= {yes | no}] [depend= ] [obj= { | }] [displayname= ] [password= ]
More…
asked Sep 3, 2014 at 11:17
Pradeep atkariPradeep atkari
5491 gold badge8 silver badges14 bronze badges
4
You can just do that too, it seems to work well too.
sc create "Servicename" binPath= "PathToyourApp.exe" DisplayName= "My Custom Service"
You can open the registry and add a string named Description in your service’s registry key to add a little more descriptive information about it. It will be shown in services.msc.
answered May 3, 2016 at 8:53
Прочитано:
2 487
Данная заметка будет своего рода шпаргалкой по аналогии с тем что у меня опубликовано на блоге но применительно к домену на Server 2008 R2
Первое устанавливаю саму систему: Windows Server 2012 R2 English, подробно останавливаться на этом не буду, так как все предельно ясно. Однако напомню, следует на сайте майкрософта ознакомиться с минимально допустимыми требованиями к железу.
Я же в свою очередь разберу процесс данной заметки на примере Virtualbox
- CPU – 2
- RAM – 4
- HDD – 40
Рекомендую всегда использовать англоязычные издания Windows Server. Как показывает практика, оригинальные (английские) версии Windows работают стабильнее, к тому же вам будет проще общаться на одном языке с профессионалами в случае возникновения проблем или при желании обменяться опытом.
Перед началом установки роли Active Directory Domain Services необходимо присвоить серверу корректное имя в соответствии со стандартами вашей организации, а затем указать статический IP-адрес в настройках сетевого подключения.
Заходим в систему под учетной записью Administrator и вводим пароль который указывали при установке системы, в моем случаем аутентификационные данные следующие:
- Login: Administrator
- Password: 712mbddr@
Далее открываем оснастку Control Panel, для этого нажимаем сочетание клавиш Win+X и в выпадающем списке выбираем оснастку Control Panel – Category – Small icons – далее выбираем раздел System.
Далее в окне System в разделе «Computer name, domain, and workgroup settings» нажимаем кнопку «Change settings».
В окне «System Properties» на вкладке «Computer Name» нажимаем кнопку «Change».
Далее указываем новое имя сервера в поле «Computer Name» и нажимаем кнопку «OK».
Здесь в данной заметке: Computer Name: srv-dc
Система предупредит о том, что для применения новых настроек необходимо перезагрузить сервер. Теперь система предложит перезагрузить сервер для того чтобы новые настройки вступили в силу. Нажимаем кнопку «Restart Now». Если же проигнорировали данное окно и случайно нажали Cancel, то чтобы перезагрузить сервер делаем так:
Win + C – в правом фрейме выбираем Settings – Power – Restart “Other(Unplanned)” и нажимаем кнопку Continue.
Далее прописываем статический IP—адрес в настройках сетевого подключения:
Нажимаем сочетание клавиш Win+X – Control Panel – Network and Sharing Center – Change adapter settings – выбираем сетевое соединение, вызываем его свойства (Properties) через правый клик — находим Internet Protocol Version 4 (TCP/IPv4) – Properties и указываем:
IP address: 10.9.9.1
Netmask: 255.255.255.0
Preferred DNS server: 127.0.0.1, т. к. на сервере будет присутствовать роль DNS Server, которая устанавливается вместе с ролью Active Directory Domain Services
Теперь можно приступить к установке роли Active Directory Domain Services.
– Server Manager – Add Roles and features – нажимаем кнопку Next – выбираем: Role-based or feature-based installation и нажимаем кнопку Next – далее выбираем сервер на который будет производиться установка роли: srv-dc 10.9.9.1 и нажимаем кнопку Next
Далее выбираем роль которую хотим использовать на этом сервере: роль Active Directory Domain Services и для ее установки мастер предложит установить так называемые компоненты соглашаемся нажатием кнопки Add Features (галочка Include management tools (it applicable) должна быть установлена. Нажимаем кнопку «Next».
На этапе добавления компонентов оставляем все значения по умолчанию.
Нажимаем кнопку «Next». — Next
Далее «Мастер установки ролей» предлагает ознакомиться с дополнительной информацией касательно роли Active Directory Domain Services.
Нажимаем кнопку «Next».
Для того чтобы начать установку выбранной роли нажимаем кнопку «Install».
Начинается установка — ожидаем… через некоторое время роль будет установлена останется нажать только кнопку Close
Теперь повысим роль нашего сервера до уровня контроллера домена:
сочетание клавиш Win+X – Control Panel – Server Manager – в левой части выбираем AD DS – More
теперь нажимаем на кнопку Promote this server to a domain controller
Настоятельно рекомендую заранее продумать какое доменное имя вы будете использовать при добавлении нового леса.
В данном руководстве рассматривается добавление нового леса, поэтому в окне «Active Directory Domain Services Configuration Wizard» выбираем пункт «Add a new forest» и в поле «Root domain name» указываем желаемое имя для корневого домена. В рамках этой заметки это polygon.local
На следующем шаге предлагается выбрать функциональный уровень нового леса и корневого домена. Если вы добавляете новый лес и планируете в дальнейшем использовать сервера на базе операционной системы Windows Server 2012 R2, то можете не менять функциональный уровень леса и корневого домена.
Указываем пароль (712mbddr@) для DSRM (Directory Service Restore Mode — режим восстановления службы каталога) и нажимаем кнопку «Next».
На данном этапе «Мастер настройки AD DS» предупредит, что делегирование для этого DNS-сервера создано не было.
Так как в данном примере один домен просто проигнорируйте данное сообщение, если же вы создаете дочерний домен, то на родительском домене необходимо создать делегирование DNS зоны.
Нажимаем кнопку «Next».
Далее можно изменить NetBIOS имя которое было присвоено вашему домену. Рекомендую оставить значение NetBIOS по умолчанию.
Нажимаем кнопку «Next».
Теперь можно изменить пути к каталогам базы данных AD DS, файлам журнала и папке SYSVOL. Рекомендую оставить эти значения по умолчанию.
Нажимаем кнопку «Next».
На следующем шаге отображается сводная информация по настройке сервера которую также можно сохранить в ps1 файле, данный файл есть скрипт PowerShell – т. е. Разворачивание домена можно автоматизировать.
Нажимаем кнопку «Next».
Далее «Мастер настройки AD DS» проверит все ли предварительные требования соблюдены и выведет отчет.
Сообщение «All prerequisite checks are passed successfully» означает, что все требования соблюдены.
Нажимаем кнопку «Install» и тем самым установщик начинает процесс повышения роли сервера до уровня контроллера домена. После того как роль вашего сервера будет повышена до уровня контроллера домена, сервер автоматически перезагрузится.
Далее я покажу, как производить управление пользователями, группами и другими объектами каталога Active Directory – это делается посредством оснастки Active Directory Administrative Center. Авторизуемся в системе под учетной записью polygon.localAdministrator
и через
сочетание клавиш Win+X – Control Panel – Server Manager – Administrative Tools – запускаем Active Directory Administrative Center либо легко вспоминаемую Active Directory Users and Computers
На этом Установка Active Directory Domain Services на Windows Server 2012 R2 завершена. На этом я пока пожалуй завершу свое пошаговое повествование, в последствии я на основе этой заметки буду строить дальнейшее повествование используемых у меня на рабочем месте сервисов и делиться результатами своих работ на своем блоге, до встречи, с уважением ekzorchik.
Как запустить приложение в виде службы 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. Чтобы создать службу, достаточно в поле Path указать путь к исполняемому файлу и нажать кнопку «Install service». Дополнительно в поле Options можно указать ключи, необходимые для запуска службы.
Также на этапе создания новой службы можно указать некоторые дополнительные параметры.
На вкладке «Shutdown» перечислены методы остановки и таймауты, используемые при штатном завершении работы или аварийной остановке приложения. Когда NSSM получает команду остановки (напр. при завершении работы приложения), то он пытается остановить контролируемое приложение штатным образом. Если же приложение не отвечает, то NSSM может принудительно завершить все процессы и подпроцессы этого приложения.
Всего есть четыре этапа завершения работы приложения, и по умолчанию они будет использоваться в таком порядке:
• На первом этапе NSSM пытается сгенерировать и отправить событие Ctrl+C. Этот способ хорошо работает для консольных приложений или скриптов, но не применим для графических приложений;
• Затем NSSM определяет все окна, созданные приложением, и посылает им сообщение WM_CLOSE, инициирующее выход из приложения;
• Третьим этапом NSSM вычисляет все потоки, созданные приложением, и отправляет им сообщение WM_QUIT, которое будет получено если приложение имеет очередь сообщений потока;
• И в качестве последнего средства NSSM может вызвать метод TerminateProcess(), принудительно завершив работу приложения.
Возможно отключить некоторые или даже все методы, однако для разных приложений срабатывают разные методы и для корректного завершения работы приложения рекомендуется оставить все как есть.
По умолчанию при падении службы NSSM пытается рестартовать ее. На вкладке «Exit actions» можно изменить автоматическое действие при нештатном завершении работы приложения, а также выставить задержку перед автоматическим перезапуском приложения.
На вкладке «Input/Output (I/O)» можно задать перенаправление вводавывода приложения в указанный файл.
На вкладке «Environment» можно задать для службы новые переменные окружения, или переопределить существующие.
Также можно не пользоваться графической оболочкой и сразу создать службу в консоли такой командой:
nssm install notepad "C:Windowssystem32notepad.exe"
Управление службой
После создания службы с помощью NSSM зайдем в оснастку Services и найдем службу notepad. Как видите, с виду она ничем не отличается от остальных служб, мы также можем ее запустить, остановить или изменить режим запуска. Однако обратите внимание, что в качестве исполняемого файла указан nssm.exe.
А если зайти в Task Manager, то мы увидим следующую картину: в качестве основного (родительского) процесса запущен NSSM, служба notepad запущена как его дочерний процесс, и уже в этом дочернем процессе запущено приложение Блокнот.
Удаление службы
Для удаления службы вводим команду nssm remove notepad и подтверждаем ее удаление. А введя команду
nssm remove notepad confirm
можно обойтись и без подтверждения.
Сегодня мы объясним, чем развертывание RDS Session Host на Windows Server 2012 R2 отличается от более ранних версий Windows Server и расскажем о доступных опциях развертывания. Remote Desktop Services на Windows Server значительно усовершенствовались за последнее время, но остается, тем не менее, много непонятного по причине множества вовлеченных в процесс компонентов. RD Session Host-ы выполняют всю грязную работу, обслуживая терминальные сессии пользователей. Однако даже при самом примитивном сценарии обязательно использование RD Connection Broker (посредника подключений к удаленному рабочему столу). Еще до того, как вы запланируете развертывание служб удаленного рабочего стола, стоит ознакомиться с его ролью.
RD Connection Broker
Когда сеанс удаленного рабочего стола отключается, приложения в сеансе пользователя продолжают работать. Для отслеживания сеансов пользователей RD Connection Broker (Посредник подключений удаленного рабочего стола) хранит такую информацию, как название хост-сервера сеансов удаленных рабочих столов, где проходит каждая сессия, состояние сессии и ее идентификатор, а также информация о подключенных пользователях в каждой сессии. Эта информация используется для подключения пользователей к существующим сеансам на серверах RD Session Host (терминальные сервера Windows). При создании новой сессии RD Connection Broker-ы также играют свою роль путем подключения пользователей к серверам RD Session Host по мере загрузки.
Начиная с Windows Server 2012, посредники подключений к удаленному рабочему столу не только хранят данные о пользовательских сессиях, но и информацию о конфигурации. Посредник подключений к удаленным рабочим столам использует внутреннюю базу данных Windows для сохранения сессии и информации о конфигурации, кроме случаев, когда установлен режим высокой доступности (HA), где используется сервер SQL 2008 R2 (или более поздняя версия).
Посредник подключений к удаленному рабочему столу требует домен Active Directory, но не может быть установлен на контроллере домена (DC). Можно развернуть службы удаленного рабочего стола в рабочей группе с помощью установки роли сервера, хотя при этом теряется возможность централизованного управления, пульты управления и функционал удаленных приложений Remoteapp.
Централизованная публикация приложений
В Windows Server 2012 также введен концепт коллекций (collections). В Windows Server 2008 R2 требовалось, чтобы системные администраторы публиковали приложения для каждого RD Session Host в индивидуальном порядке. Теперь посредник подключений к удаленному рабочему столу хранит информацию о конфигурации.
Опции развертывания: быстрая и стандартная
Ключ к пониманию того, как развернуть RDS на Windows Server 2012 R2 в понимании того, что недостаточно установки роли RD Session Host. Диспетчер серверов обеспечивает специальный режим развертывания для установки RDS, таким образом все необходимые компоненты установлены в нужных местах, чтобы делает развертывание простым и быстрым.
Службы удаленного рабочего стола на Windows Server 2012 R2
В мастере добавления ролей и компонентов (Add Roles and Features Wizard) в диспетчере серверов есть специальная опция установки, установка служб удаленных рабочих столов (Remote Desktop Services installation), которую необходимо выбрать при развертывании служб удаленных рабочих столов. Формулировка при этом варианте немного смущает, но опция позволяет устанавливать хосты сеансов удаленных рабочих столов без развертывания полной инфраструктуры виртуальных ПК (virtual desktop infrastructure — VDI).
Стандартное развертывание — это модель развертывания по умолчанию, и если вы действительно хотите установить все необходимые роли на одном сервере, что не является лучшей практикой, то стоит выбрать эту опцию. Быстрая установка (Quick Start) может быть полезна в сценариях тестирования или в небольших филиалах, где есть только один доступный сервер.
Стандартное развертывание позволяет установить RD Connection Broker, RD Session Host и RD Web Access на одном сервере или на нескольких серверах, что является наиболее вероятным сценарием развертывания в производственной среде. Посредник подключений к удаленному рабочему столу включает внутреннюю базу данных Windows, RD Session Host и RD Web Access roles. Все это является обязательным, но RD Gateway играет факультативную роль. RD Web Access предоставляет пользователям доступ к RemoteApps или рабочим столам из меню «Пуск» или с веб-портала. Если вы хотите использовать RDS больше, чем в течение 120-дневного пробного периода, вам потребуется дополнительно устанавливать роль лицензирования удаленных рабочих столов.
Консоли управления
Все необходимые консоли управления можно найти в диспетчере серверов на сервере, где установлен посредник подключений к удаленным рабочим столам, за исключением RD Gateway и RD Licensing.
Установка служб удаленного рабочего стола на Windows Server 2012 R2
Здесь мы расскажем о стандартной модели развертывания, которая позволяет распределить роли серверов удаленного рабочего стола или установить их для одного сервера.
Стандартное развертывание — это модель развертывания по умолчанию, и даже при том условии, что для демонстрации будут установлены три роли сервера на один сервер, это не лучшее решение. Внутренняя база данных Windows устанавливается как часть процесса для поддержки роли посредника подключений к удаленному рабочему столу, также как и некоторые компоненты IIS для RD Web Access, которые обеспечивают доступ к RemoteApps или рабочим столам из меню «Пуск» или с веб-портала.
Лицензирование
При желании использовать развернутые службы удаленного рабочего стола более чем в течение 120-дневного тестового периода необходимо установить роль RD Licensing, добавить лицензию, зарегистрировать сервер лицензирования с Active Directory, а затем добавить RD Licensing в RDS-инфраструктуру. RD Licensing устанавливается также, как любая другая роль, поэтому нет необходимости использовать специальную опцию развертывания в диспетчере серверов.
Развертывание служб удаленного рабочего стола
Серверы, которые вы планируете использовать в своем RDS-развертывании, должны быть добавлены в Пул Серверов (Server Pool) в диспетчере серверов перед началом процесса. Вам потребуется домен Active Directory domain и аккаунт, у которого есть разрешение на установку ролей сервера на выбранный сервер (серверы). Дополнительно может быть установлена роль посредника подключений к удаленному рабочему столу на контроллер домена.
- Откройте Диспетчер серверов;
- Выберите «Добавить роли и компоненты» в меню управления;
- В Мастере добавления ролей и компонентов нажмите «Далее» на экране «Перед началом установки» (Before You Begin).
- На экране «Выберите тип установки» выберите «Установка служб удаленного рабочего стола» и нажмите «Далее»;
- На экране «Выберите тип развертывания» выберите «Стандартное» и нажмите «Далее».
Стандартное или быстрое развертывание
- На экране «Выберите сценарий развертывания» выберите развертывание серверов сеансов (Session-based desktop deployment) и нажмите «Далее».
- На экране обзора служб ролей (Review role services) отметьте службы ролей для установки и нажмите «Далее».
Роли служб удаленных рабочих столов
- На экране определения сервера посредника подключений к удаленному рабочему столу кликните дважды на сервер в пуле серверов для того, чтобы добавить его в список выбранных. Это тот сервер, на который будет установлена роль посредника подключений к удаленному рабочему столу. Нажмите «Далее».
Выберите сервер из пула серверов
- На экране определения сервера RD Web Access повторите предыдущий шаг, чтобы добавить сервер в Selected, или поставьте галочку в «Установить службу роли RD Web Access на сервер посредника подключений к удаленному рабочему столу» (Install the RD Web Access role service on the RD Connection Broker server), если вы хотите установить эту роль на тот же сервер, что и посредника подключений к удаленному рабочему столу. Нажмите «Далее». continue.
- На экране определения серверов RD Session Host выберите один или более серверов из пула серверов, кликнув дважды или с помощью выбора мышью и нажатия на стрелку в центре диалогового окна.
- На экране подтверждения нажмите «Перезапустить сервер автоматически, если необходимо» (Restart the destination server automatically if required) и нажмите «Развернуть».
- Когда 3 роли сервера будут установлены, нажмите «Закрыть» на экране хода развертывания (View progress).
Ход развертывания
Теперь необходимо залогиниться на сервере, где установлена роль посредника подключений к удаленному рабочему столу, открыть Диспетчер серверов и нажать «Службы удаленного рабочего стола» (Remote Desktop Services) в списке опций слева, чтобы увидеть информацию по вашему
RDS-развертыванию
.
Дашборд служб удаленного рабочего стола в Диспетчере серверов
Службы в Windows — особые процессы, выполняемые в фоновом режиме, в том числе от учетной записи «СИСТЕМА», которые могут быть запущены в том числе до входа в систему. При желании вы можете создать свою собственную службу, которая будет работать таким же образом.
В этой инструкции подробно о том, как создать службу в Windows 11 или Windows 10 средствами системы, ограничениях методов и одном дополнительном способе заставить работать ваш процесс в качестве службы.
Создание службы в командной строке
Первый способ — использование команды командной строки для создания своей службы, шаги будут следующими:
- Запустите командную строку от имени Администратора (способы запуска командной строки от Администратора).
- Используйте команду, заменив текстовые описания и пути на свои:
sc create Имя_службы binPath="C:service-file.exe" DisplayName= "Описание_службы" type=own start=auto
- После нажатия Enter вы получите сообщение: CreateService: успех, что означает, что служба была успешно создана.
В указанной команде используются следующие параметры:
- binPath — путь к исполняемому файлу службы.
- DisplayName — отображаемое в списке служб имя службы.
- start — тип запуска, возможные значения: boot, auto, demand (значение по умолчанию), disabled, delayed-auto
- type — тип службы, по умолчанию own, возможны другие значения: share (делит исполняемый файл с другими службами), kernel (драйвер), filesys (драйвер файловой системы), interact (интерактивная служба с возможность взаимодействия с пользователем, поддержка этого типа служб прекращается).
После создания службы вы сможете увидеть её в списке служб (Win+R — services.msc), а автоматический запуск произойдет при следующей перезагрузке системы.
Создание службы в Windows PowerShell
Создать службу можно и в PowerShell, запущенном от имени администратора (или в Терминале Windows). Базовый вариант команды с параметрами по умолчанию:
New-Service -Name "Имя_Службы" -BinaryPathName '"C:путь_к_файлу параметры_запуска"'
Расширенный вариант с указанием описания и типа запуска:
New-Service -Name MyService -BinaryPathName '"C:путь_к_файлу параметры_запуска"' -DisplayName "Имя_службы" -Description "Описание службы" -StarupType "Automatic"
В случае, если выполняется запуск исполняемого файла без параметров, а путь не содержит пробелов, использование кавычек не обязательно, например:
-BinaryPathName C:remontka.exe
При создании служб в PowerShell доступны и ряд дополнительных параметров, описанных в официальной справке на сайте Майкрософт.
Удаление созданной службы
Удалить созданную службы вы можете также в командной строке, запущенной от имени Администратора с помощью команды:
sc delete Имя_службы
Или в Windows PowerShell:
Remove-Service -Name MyService
После выполнения указанных команд созданная вами служба будет удалена из Windows.
Созданная служба не работает, варианты решения
Из описания можно предположить, что любой файл .exe может быть службой, однако, при попытке добавить свои фоновые утилиты и заставить их работать в виде службы рядовые пользователи обычно сталкиваются с ситуацией, когда процесс запускается, а затем закрывается сам. А при запуске службы вручную через некоторое время сообщает, что служба не ответила на запрос своевременно или о других ошибках.
Причина в том, что исполняемые файлы служб — не совсем обычные программы, они, помимо прочего, обмениваются данными с системой. Если ваш EXE не отвечает на соответствующие запросы системы, Windows «делает вывод» о том, что со службой что-то не так.
Как быть, если вы всё-таки настойчиво хотите использовать свой прикладной исполняемый файл в качестве службы?
- Использовать планировщик заданий и запуск от соответствующего пользователя — это не будет в полной мере службой, но почти то, что нужно.
- Ранее существовала программа RunAsSvc, позволяющая запускать любые процессы в качестве службы, но для современных ОC он не применима, а разработка была прекращена.
- Использовать инструменты INSTSRV.EXE и SRVANY.EXE из Windows Server 2003 Resource Kit Tools при создании службы Windows.
Создание пользовательской службы с помощью INSTSRV.EXE и SRVANY.EXE
Последний вариант из приведённого выше списка рассмотрим подробнее. Шаги будут следующими:
- Загрузите (вероятнее всего, придется найти в Интернете на сторонних сайтах) Windows Server 2003 Resource Kit полностью или только файлы INSTSRV.EXE и SRVANY.EXE, располагаем их у себя на диске, в моем примере путь — C:Windows
- В командной строке от имени администратора используйте команду (пути меняем на свои):
C:Windowsinstsrv.exe Имя_службы C:Windowssrvany.exe
- Если вы получили сообщение о том, что The service was successfully added, всё прошло успешно. Теперь требуется запустить редактор реестра (Win+R — regedit).
- В редакторе реестра перейдите по пути
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices
и найдите раздел с вашим именем службы. Нажимаем по нему правой кнопкой мыши и выбираем пункт «Создать» — «Раздел», задаем имя «Parameters» для раздела.
- Выберите созданный раздел, нажмите правой кнопкой мыши в правой панели редактора реестра и создайте новый строковый параметр с именем Application
- Дважды нажмите по параметру и в поле «Значение» укажите путь к вашему файлу exe для запуска службы.
Закройте редактор реестра — служба создана, её можно запустить из services.msc или она будет автоматически запущена после перезагрузки компьютера.
Учитывайте, что во всех приведенных примерах служба по умолчанию запускается с учетной записью «СИСТЕМА». В некоторых случаях это может приводить к неправильной работе. В этом случае может иметь смысл зайти в свойства службы в services.msc и изменить параметры на вкладке «Вход в систему».