Установка службы windows через командную строку

Как создать службу в WindowsСлужбы в Windows — особые процессы, выполняемые в фоновом режиме, в том числе от учетной записи «СИСТЕМА», которые могут быть запущены в том числе до входа в систему. При желании вы можете создать свою собственную службу, которая будет работать таким же образом.

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

Создание службы в командной строке

Первый способ — использование команды командной строки для создания своей службы, шаги будут следующими:

  1. Запустите командную строку от имени Администратора (способы запуска командной строки от Администратора).
  2. Используйте команду, заменив текстовые описания и пути на свои:
    sc create Имя_службы binPath="C:\service-file.exe" DisplayName= "Описание_службы" type=own start=auto
  3. После нажатия Enter вы получите сообщение: CreateService: успех, что означает, что служба была успешно создана. Создание службы в командной строке Windows

В указанной команде используются следующие параметры:

  • binPath — путь к исполняемому файлу службы.
  • DisplayName — отображаемое в списке служб имя службы.
  • start — тип запуска, возможные значения: boot, auto, demand (значение по умолчанию), disabled, delayed-auto
  • type — тип службы, по умолчанию own, возможны другие значения: share (делит исполняемый файл с другими службами), kernel (драйвер), filesys (драйвер файловой системы), interact (интерактивная служба с возможность взаимодействия с пользователем, поддержка этого типа служб прекращается).

После создания службы вы сможете увидеть её в списке служб (Win+Rservices.msc), а автоматический запуск произойдет при следующей перезагрузке системы.

Созданная служба в списке служб Windows

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

Создать службу можно и в PowerShell, запущенном от имени администратора (или в Терминале Windows). Базовый вариант команды с параметрами по умолчанию:

New-Service -Name "Имя_Службы" -BinaryPathName '"C:\путь_к_файлу параметры_запуска"'

Расширенный вариант с указанием описания и типа запуска:

New-Service -Name MyService -BinaryPathName '"C:\путь_к_файлу параметры_запуска"' -DisplayName "Имя_службы" -Description "Описание службы" -StartupType "Automatic"

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

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

-BinaryPathName C:\remontka.exe

При создании служб в PowerShell доступны и ряд дополнительных параметров, описанных в официальной справке на сайте Майкрософт.

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

Удалить созданную службы вы можете также в командной строке, запущенной от имени Администратора с помощью команды:

sc delete Имя_службы

Удаление службы в командной строкеИли в Windows PowerShell:

Remove-Service -Name MyService

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

Созданная служба не работает, варианты решения

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

Причина в том, что исполняемые файлы служб — не совсем обычные программы, они, помимо прочего, обмениваются данными с системой. Если ваш EXE не отвечает на соответствующие запросы системы, Windows «делает вывод» о том, что со службой что-то не так.

Как быть, если вы всё-таки настойчиво хотите использовать свой прикладной исполняемый файл в качестве службы?

  • Использовать планировщик заданий и запуск от соответствующего пользователя — это не будет в полной мере службой, но почти то, что нужно.
  • Ранее существовала программа RunAsSvc, позволяющая запускать любые процессы в качестве службы, но для современных ОC он не применима, а разработка была прекращена. Утилита RunAsSvc
  • Использовать инструменты INSTSRV.EXE и SRVANY.EXE из Windows Server 2003 Resource Kit Tools при создании службы Windows.

Создание пользовательской службы с помощью INSTSRV.EXE и SRVANY.EXE

Последний вариант из приведённого выше списка рассмотрим подробнее. Шаги будут следующими:

  1. Загрузите (вероятнее всего, придется найти в Интернете на сторонних сайтах) Windows Server 2003 Resource Kit полностью или только файлы INSTSRV.EXE и SRVANY.EXE, располагаем их у себя на диске, в моем примере путь — C:\Windows
  2. В командной строке от имени администратора используйте команду (пути меняем на свои):
    C:\Windows\instsrv.exe Имя_службы C:\Windows\srvany.exe

    Создание службы с помощью instsrv и srvany

  3. Если вы получили сообщение о том, что The service was successfully added, всё прошло успешно. Теперь требуется запустить редактор реестра (Win+Rregedit).
  4. В редакторе реестра перейдите по пути
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\

    и найдите раздел с вашим именем службы. Нажимаем по нему правой кнопкой мыши и выбираем пункт «Создать» — «Раздел», задаем имя «Parameters» для раздела.

  5. Выберите созданный раздел, нажмите правой кнопкой мыши в правой панели редактора реестра и создайте новый строковый параметр с именем Application
  6. Дважды нажмите по параметру и в поле «Значение» укажите путь к вашему файлу exe для запуска службы. Путь к исполняемому файлу службы в реестре

Закройте редактор реестра — служба создана, её можно запустить из services.msc или она будет автоматически запущена после перезагрузки компьютера.

Учитывайте, что во всех приведенных примерах служба по умолчанию запускается с учетной записью «СИСТЕМА». В некоторых случаях это может приводить к неправильной работе. В этом случае может иметь смысл зайти в свойства службы в services.msc и изменить параметры на вкладке «Вход в систему».

Иногда может потребоваться взять исполняемый файл и зарегистрировать его в качестве службы 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:\MyService\MyService.exe DisplayName=″My New Service″ type=own start=auto

Затем откроем оснастку «Services» и посмотрим результат.

оснастка Службы

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

Sc config MyService DisplayName=″My Service″

Ну и полностью удалить службу можно вот так:

Sc delete MyService

создание, изменение и удаление службы Windows

PowerShell

PowerShell может почти все 🙂 , в том числе и управлять службами Windows. Создать новую службу можно с помощью командлета New-Service. Создадим такой же сервис, как и в предыдущем примере, только добавим к нему описание (Description):

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

В принципе PowerShell имеет примерно такой же функционал как и Sc.exe, разве что позволяет добавить описание. А вот для удаления служб в PS простого способа нет, придется воспользоваться вот такой конструкцией:

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

Поэтому лично я предпочитаю использовать Sc.exe.

Open Visual studio and select new project by selecting Windows Service template in Windows Desktop tab. Than copy following code into your service_name.cs file.

using System.Diagnostics;
using System.ServiceProcess;
namespace TimerService
{
    public partial class Timer_Service : ServiceBase
    {
        public Timer_Service()
        {
            InitializeComponent();
        }
        static void Main()
        {
            if (System.Diagnostics.Debugger.IsAttached)
            {
                Timer_Service service = new Timer_Service();
                service.OnStart(null);
            }
            else
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[]
                {
                    new Timer_Service()
                };
                ServiceBase.Run(ServicesToRun);
            }
        }
        protected override void OnStart(string[] args)
        {
            EventLog.WriteEvent("Timer_Service", new EventInstance(0, 0, EventLogEntryType.Information), new string[] { "Service start successfully." });
        }
        protected override void OnStop()
        {            
            EventLog.WriteEvent("Timer_Service", new EventInstance(0, 0, EventLogEntryType.Information), new string[] { "Service stop successfully." });
        }
    }
}

Right-Click on service_name.cs file and open designer of service. than right-click and select Add Installer. than right-click on serviceProcessInstaller1 and change its property value of Account from User to Local System.

Remove static void main method from Program.cs file.
Than save and Build your project.

NOTE: goto bin\Ddebug folder of your project folder. Than open Properties of your service_name.exe file. Than goto Compatibility tab. Than click on Change Settings For All Users.

Select option Run this program as an administrator.

Now, You have to open CommandPromt as Administrator.
After open, set directory to where your InstallUtil.exe file is placed.
for ex: C:\Windows\Microsoft.NET\Framework64\v4.0.30319.
now write the following command:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319>InstallUtil.exe -i C:\TimerService\TimerService\bin\Debug\TimerService.exe

Note: -i is for install he service and -u for Unsinstall.

after -i set the write the path where you want to install your service.

now write the command in CommandPromt as follows:

C:\TimerService\TimerService\bin\Debug>net start service_name

Note: use stop for stop the Service.

Now, open ViewEventLog.exe. Select Windows Logs>Application. There you can check your Service’s log by start and stop the service.

In this article I’ll show how to install and configure a Windows Service, query its status and properties, and then how to uninstall it. I’ll be using the command line utilities installutil.exe and sc.exe to install and configure the service.

Add a service installer class to your Windows Service project

In order to use installutil.exe to install your Windows Service, you need to add a service installer class. Otherwise when you try to install, you’ll get the following error:

No public installers with the RunInstallerAttribute.Yes attribute could be found in the C:\Services\TestService.exe assembly.

To create a service installer class:

  • Open your service class file in design mode in Visual Studio.
  • Right-click > click Add Installer.

Service component design mode, right-click and click Add Installer

After you click Add Installer, it will create the service installer class and open it in design mode.

At a bare minimum, you need to set the ServiceName and Account properties.

  • Click serviceInstaller1 to bring up its properties.
  • Specify the ServiceName property.

After adding the installer, the ProjectInstaller.cs component will pop up in design mode. Click on serviceInstaller1 and fill in the ServiceName property

Next, set the Account property. This property is the account that your service runs as, so choose whatever makes sense in your case (if you’re not sure, ask a security person).

  • Click serviceProcessInstaller1 to bring up its properties.
  • Set the Account to whatever value is appropriate in your situation.

In ProjectInstaller.cs, click serviceProcessInstaller and set the appropriate service account

The following batch file installs TestService.exe by using installutil.exe, configures the service with sc.exe, and starts the service using net start:

@ECHO OFF

REM Get log file name with timestamp
for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a)
set LogName="C:\logs\installTestService%ts:~0,8%%ts:~8,4%%ts:~12,2%.log"

REM Install service
set servicePath="C:\Services\TestService.exe" 
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe" %servicePath% >> %LogName%

REM Add dependency on SQL Server
sc config TestService depend=MSSQL$SQLEXPRESS >> %LogName%

REM Make start automatically
sc config TestService start= auto >> %LogName%

REM On crash, restart after 1 minute
sc failure TestService actions= restart/60000/restart/60000// reset= 86400 >> %LogName%

REM Start the service
net start TestService >> %LogName%
Code language: plaintext (plaintext)

Running this installs the service and outputs to a timestamped log file (ex: C:\logs\installTestService20210205074016.log).

Note: Execute this by using Run as Administrator.

It configures the service with the following properties:

  • Depends on service MSSQL$SQLEXPRESS (SQL Server Express). This means it won’t run unless SQL Server Express is running. When SQL Server Express restarts, it also restarts TestService.
  • Starts automatically.
  • Restarts after 1 minute if the service crashes. Note: This is only configuring it to auto-restart twice. After two failures, it won’t attempt to auto-restart. It resets the failure counter after 1 day.

Query the service properties and status

You can look at the service properties and status either by looking in Services, or by querying the properties from the command line by using sc.exe.

Execute the following to get the service properties and status:

sc qc TestServiceCode language: plaintext (plaintext)

This shows that the service is running and it’s using the configuration specified in the batch install script (from the previous section):

[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: TestService
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : "C:\Services\TestService.exe"
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : TestService
        DEPENDENCIES       : MSSQL$SQLEXPRESS
        SERVICE_START_NAME : NT AUTHORITY\LocalService
Code language: plaintext (plaintext)

Execute the following to check the failure configuration:

sc qfailure TestServiceCode language: plaintext (plaintext)

This shows that it’s using the failure configuration specified in the batch install script:

[SC] QueryServiceConfig2 SUCCESS

SERVICE_NAME: TestService
        RESET_PERIOD (in seconds)    : 86400
        REBOOT_MESSAGE               :
        COMMAND_LINE                 :
        FAILURE_ACTIONS              : RESTART -- Delay = 60000 milliseconds.
                                       RESTART -- Delay = 60000 milliseconds.

Uninstall the service

The following batch file uninstalls the service and outputs the results to a timestamped log:

@ECHO OFF

REM Get log file name with timestamp
for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a)
set LogName="C:\logs\uninstallTestService%ts:~0,8%%ts:~8,4%%ts:~12,2%.log"

REM Install service
set servicePath="C:\Services\TestService.exe" 
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe" %servicePath% -u >> %LogName%
Code language: plaintext (plaintext)

Running this uninstalls the service and outputs to a timestamped log file (ex: C:\logs\uninstallTestService20210205074023.log).

You can check if the service is uninstalled by checking if sc query returns an error, like this:

C:\WINDOWS\system32>sc query TestService
[SC] EnumQueryServicesStatus:OpenService FAILED 1060:

The specified service does not exist as an installed service.Code language: plaintext (plaintext)

Related Articles

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

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

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

sc create [ServiceName] [binPath= ] <параметр1= > <параметр2= >

Где:

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

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

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

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

оснастка «Services»

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

Sc config MyService DisplayName=″My Service″

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

Sc delete MyService

удалить службу

С помощью утилиты 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

параметры службы windows 10

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

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

Так что утилита sc.exe, в этом плане будет получше. И по этой причине я предпочитаю именно ее.

Автор статьи: Сергей
Windows
6
49512

Это может пригодиться:

Новые комментарии

  • Установщик обнаружил ошибку 0x800b0109 windows 7 как исправить
  • Установка службы windows из командной строки
  • Установщик обнаружил ошибку 0x80080005 windows 10
  • Установка служб iis на windows 10
  • Установщик обнаружил ошибку 0x80070424 windows 7 как исправить