Как написать службу Windows

Обновлено: 04.07.2024

В этом руководстве вы узнаете, как:

Предпосылки

Создать новый проект

с желаемым названием проекта.

Установить пакет NuGet

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

Обновить файл проекта

Предыдущие изменения в файле проекта добавляют узел включения. Дополнительные сведения см. в разделе Настройка контекста, допускающего значение NULL.

Создать службу

Предыдущий исходный код службы шуток предоставляет единственную функциональность — метод GetJoke. Это метод возврата строки, который представляет собой случайную программную шутку. Поле _jokes на уровне класса используется для хранения списка шуток. Случайная шутка выбирается из списка и возвращается.

Переписать класс Worker

В приведенном выше коде JokeService внедряется вместе с ILogger . Оба доступны для класса как закрытые поля только для чтения. В методе ExecuteAsync служба шутки запрашивает шутку и записывает ее в регистратор. В данном случае логгер реализован Журналом событий Windows — Microsoft.Extensions.Logging.EventLog.EventLogLogger. Журналы записываются и доступны для просмотра в средстве просмотра событий.

По умолчанию серьезность журнала событий — предупреждение. Это можно настроить, но для демонстрационных целей WindowsBackgroundService регистрирует журналы с помощью метода расширения LogWarning. Чтобы настроить таргетинг на уровень EventLog, добавьте запись в appsettings..json или укажите значение EventLogSettings.Filter.

Переписать класс Program

Метод расширения UseWindowsService настраивает приложение для работы в качестве службы Windows. Имя службы задано как ".NET Joke Service" . Размещенная служба зарегистрирована для внедрения зависимостей.

Опубликовать приложение

Предыдущие выделенные строки файла проекта определяют следующее поведение:

Щелкните правой кнопкой мыши проект в обозревателе решений и выберите "Опубликовать". . Затем выберите Добавить профиль публикации, чтобы создать профиль. В диалоговом окне «Публикация» выберите «Папка» в качестве цели.

Публикация Visual Studio диалог

Оставьте расположение по умолчанию и нажмите Готово. После создания профиля выберите Показать все настройки и проверьте настройки профиля.

Профиль Visual Studio настройки

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

  • Режим развертывания: автономный
  • Создать один файл: флажок установлен
  • Включить компиляцию ReadyToRun: флажок установлен
  • Обрезать неиспользуемые сборки (в предварительном просмотре): флажок снят

Наконец выберите Опубликовать. Приложение компилируется, и полученный файл .exe публикуется в выходном каталоге /publish.

Дополнительную информацию см. в разделе Публикация dotnet.

Создать службу Windows

Чтобы создать службу Windows, используйте команду create встроенного диспетчера управления службами Windows (sc.exe). Запустите PowerShell от имени администратора.

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

Вы увидите выходное сообщение:

Дополнительную информацию см. в разделе Создание sc.exe.

Настройка службы Windows

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

Службы Windows предоставляют параметры конфигурации восстановления. Вы можете запросить текущую конфигурацию с помощью команды sc.exe qfailure " " (где имя вашей службы), чтобы прочитать текущие значения конфигурации восстановления:

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

 Диалоговое окно свойств конфигурации восстановления службы Windows». /><br /></p>
<p>Чтобы настроить восстановление, используйте ошибку sc.exe

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

После успешной настройки вы можете еще раз запросить значения с помощью команды sc.exe qfailure " ":

Вы увидите настроенные значения перезапуска.

Диалоговое окно свойств конфигурации восстановления службы Windows с включенным перезапуском.

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

Чтобы увидеть приложение, созданное как служба Windows, откройте Службы. Выберите клавишу Windows (или Ctrl + Esc ) и выполните поиск в разделе «Службы». В приложении "Службы" вы сможете найти службу по ее названию.

Пользовательский интерфейс служб .

Чтобы убедиться, что служба работает должным образом, вам необходимо:

  • Запустить службу
  • Просмотреть журналы
  • Остановить службу

Для отладки приложения убедитесь, что вы не пытаетесь отладить исполняемый файл, активно работающий в процессе служб Windows.

 Невозможно запустить программу.

Запустить службу Windows

Чтобы запустить службу Windows, используйте команду запуска sc.exe:

Вы увидите вывод, аналогичный следующему:

Статус службы изменится с START_PENDING на Выполняется.

Просмотреть журналы

Для просмотра журналов откройте средство просмотра событий. Нажмите клавишу Windows (или Ctrl + Esc) и найдите «Просмотр событий». Выберите узел «Просмотр событий (локальный)» > «Журналы Windows» > «Приложение». Вы должны увидеть запись уровня предупреждения с источником, соответствующим пространству имен приложений. Дважды щелкните запись или щелкните правой кнопкой мыши и выберите "Свойства события", чтобы просмотреть сведения.

Диалог свойств события , с подробностями, полученными от службы

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

Остановить службу Windows

Чтобы остановить службу Windows, используйте команду остановки sc.exe:

Вы увидите вывод, аналогичный следующему:

Статус службы изменится с STOP_PENDING на Stopped.

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

Чтобы удалить службу Windows, используйте команду удаления собственного диспетчера управления службами Windows (sc.exe). Запустите PowerShell от имени администратора.

Если служба не находится в состоянии "Остановлена", она не будет немедленно удалена. Перед выполнением команды удаления убедитесь, что служба остановлена.

Эта документация не относится к последней версии службы Windows. Последние сведения о службах Windows с использованием BackgroundService и шаблона Worker Service см. по адресу:

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

Создать службу

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

В меню "Файл" Visual Studio выберите "Создать" > "Проект" (или нажмите Ctrl+Shift+N), чтобы открыть окно "Новый проект".

В поле Имя введите MyNewService, а затем нажмите кнопку ОК.

Появится вкладка "Дизайн" (Service1.cs [Дизайн] или Service1.vb [Дизайн]).

Шаблон проекта включает класс компонентов с именем Service1, который наследуется от System.ServiceProcess.ServiceBase. Он включает в себя большую часть базового кода службы, например код для запуска службы.

Переименовать службу

Переименуйте службу с Service1 на MyNewService.

В обозревателе решений выберите Service1.cs или Service1.vb, а затем в контекстном меню выберите «Переименовать». Переименуйте файл в MyNewService.cs или MyNewService.vb и нажмите Enter

Появится всплывающее окно с вопросом, хотите ли вы переименовать все ссылки на элемент кода Service1.

Во всплывающем окне выберите Да.

 Приглашение переименовать

На вкладке "Дизайн" выберите "Свойства" в контекстном меню. В окне свойств измените значение ServiceName на MyNewService.

 Свойства службы

Выберите «Сохранить все» в меню «Файл».

Добавить функции в сервис

В этом разделе вы добавите пользовательский журнал событий в службу Windows. Компонент EventLog — это пример типа компонента, который можно добавить в службу Windows.

Добавить функцию пользовательского журнала событий

В обозревателе решений в контекстном меню MyNewService.cs или MyNewService.vb выберите View Designer.

На панели инструментов разверните Компоненты, а затем перетащите компонент EventLog на вкладку Service1.cs [Дизайн] или Service1.vb [Дизайн].

В обозревателе решений в контекстном меню MyNewService.cs или MyNewService.vb выберите Просмотреть код.

Определить собственный журнал событий.

Добавьте оператор using в MyNewService.cs (если он еще не существует) или оператор Imports в MyNewService.vb для пространства имен System.Diagnostics:

Выберите «Сохранить все» в меню «Файл».

Определить, что происходит при запуске службы

В редакторе кода MyNewService.cs или MyNewService.vb найдите метод OnStart. Visual Studio автоматически создала пустое определение метода при создании проекта. Добавьте код, который записывает запись в журнал событий при запуске службы:

Опрос

Поскольку приложение-служба рассчитано на длительную работу, оно обычно опрашивает или отслеживает систему, которую вы настраиваете в методе OnStart. Метод OnStart должен вернуться в операционную систему после начала работы службы, чтобы система не была заблокирована.

Чтобы настроить простой механизм опроса, используйте компонент System.Timers.Timer. Таймер вызывает событие Elapsed через равные промежутки времени, и в это время ваша служба может выполнять мониторинг. Вы используете компонент Timer следующим образом:

  • Задайте свойства компонента Timer в методе MyNewService.OnStart.
  • Запустите таймер, вызвав метод Start.
Настройте механизм опроса

Добавьте следующий код в событие MyNewService.OnStart, чтобы настроить механизм опроса:

Добавьте оператор using в MyNewService.cs или оператор Imports в MyNewService.vb для пространства имен System.Timers:

В класс MyNewService добавьте метод OnTimer для обработки события Timer.Elapsed:

В классе MyNewService добавьте переменную-член. Он содержит идентификатор следующего события для записи в журнал событий:

Определить, что происходит, когда служба останавливается

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

Определить другие действия для сервиса

Вы можете переопределить методы OnPause, OnContinue и OnShutdown, чтобы определить дополнительную обработку для вашего компонента.

В следующем коде показано, как переопределить метод OnContinue в классе MyNewService:

Установить статус службы

Службы сообщают о своем состоянии диспетчеру управления службами, чтобы пользователь мог определить, правильно ли работает служба. По умолчанию служба, наследующая от ServiceBase, сообщает об ограниченном наборе параметров состояния, включая SERVICE_STOPPED, SERVICE_PAUSED и SERVICE_RUNNING. Если для запуска службы требуется некоторое время, полезно сообщить о статусе SERVICE_START_PENDING.

Вы можете реализовать параметры состояния SERVICE_START_PENDING и SERVICE_STOP_PENDING, добавив код, который вызывает функцию Windows SetServiceStatus.

Реализация статуса ожидания службы

Добавьте следующий код в MyNewService.cs или MyNewService.vb, чтобы объявить значения ServiceState и добавить структуру статуса, которую вы будете использовать в вызове вызова платформы:

Диспетчер управления службами использует элементы dwWaitHint и dwCheckpoint структуры SERVICE_STATUS, чтобы определить время ожидания запуска или завершения работы службы Windows. Если ваши методы OnStart и OnStop выполняются долго, ваша служба может запросить дополнительное время, снова вызвав SetServiceStatus с увеличенным значением dwCheckPoint.

В классе MyNewService объявите функцию SetServiceStatus с помощью вызова платформы:

Чтобы реализовать статус SERVICE_START_PENDING, добавьте следующий код в начало метода OnStart:

Добавьте код в конец метода OnStart, чтобы установить статус SERVICE_RUNNING:

(Необязательно) Если OnStop — метод с длительным выполнением, повторите эту процедуру в методе OnStop. Реализуйте статус SERVICE_STOP_PENDING и возвращайте статус SERVICE_STOPPED перед выходом из метода OnStop.

Добавить установщиков в сервис

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

В обозревателе решений в контекстном меню MyNewService.cs или MyNewService.vb выберите View Designer.

В представлении «Дизайн» выберите фоновую область, затем выберите «Добавить программу установки» в контекстном меню.

По умолчанию Visual Studio добавляет в проект класс компонента с именем ProjectInstaller , который содержит два установщика. Эти установщики предназначены для вашей службы и связанного с ней процесса.

В окне "Свойства" убедитесь, что для свойства ServiceName задано значение MyNewService.

Добавьте текст в свойство Description, например Пример службы.

Этот текст отображается в столбце "Описание" окна "Службы" и описывает службу для пользователя.

 Описание службы в окне Службы.

Добавьте текст в свойство DisplayName. Например, Отображаемое имя MyNewService.

Этот текст отображается в столбце «Отображаемое имя» окна «Службы». Это имя может отличаться от свойства ServiceName, которое используется системой (например, имя, которое вы используете для команды net start для запуска службы).

Установите для свойства StartType значение Automatic в раскрывающемся списке.

Свойства установщика для службы Windows

Этот параметр устанавливает службу и запускает ее с использованием локальной системной учетной записи.

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

(Необязательно) Установите параметры запуска

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

Служба Windows может принимать аргументы командной строки или параметры запуска. Когда вы добавляете код для обработки параметров запуска, пользователь может запускать вашу службу со своими собственными параметрами запуска в окне свойств службы. Однако эти параметры запуска не сохраняются при следующем запуске службы. Чтобы установить параметры запуска на постоянной основе, задайте их в реестре.

Каждая служба Windows имеет запись реестра в подразделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. В подразделе каждой службы используйте подраздел Parameters для хранения информации, к которой может получить доступ ваша служба. Вы можете использовать файлы конфигурации приложений для службы Windows так же, как и для других типов программ. Пример кода см. в ConfigurationManager.AppSettings.

Чтобы добавить параметры запуска

Выберите Program.cs или MyNewService.Designer.vb, затем выберите «Просмотр кода» в контекстном меню. В методе Main измените код, чтобы добавить входной параметр и передать его конструктору службы:

В MyNewService.cs или MyNewService.vb измените конструктор MyNewService для обработки входного параметра следующим образом:

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

Чтобы указать аргументы командной строки, добавьте следующий код в класс ProjectInstaller в ProjectInstaller.cs или ProjectInstaller.vb:

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

Создать сервис

В обозревателе решений выберите «Свойства» в контекстном меню проекта MyNewService.

Появятся страницы свойств вашего проекта.

На вкладке "Приложение" в списке объектов "Автозагрузка" выберите MyNewService.Program или Sub Main для проектов Visual Basic.

Чтобы собрать проект, в обозревателе решений выберите "Построить" в контекстном меню вашего проекта (или нажмите Ctrl+Shift+B).

Установить службу

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

В командной строке разработчика для Visual Studio перейдите в папку, содержащую выходные данные вашего проекта (по умолчанию это подкаталог \bin\Debug вашего проекта).

Введите следующую команду:

Если служба установлена ​​успешно, команда сообщает об успехе.

Если происходит сбой процесса installutil.exe, проверьте журнал установки, чтобы узнать причину. По умолчанию журнал находится в той же папке, что и исполняемый файл службы. Установка может завершиться ошибкой, если:

  • Класс RunInstallerAttribute отсутствует в классе ProjectInstaller.
  • Для этого атрибута не задано значение true .
  • Класс ProjectInstaller не определен как общедоступный .

Запустить и запустить службу

В Windows откройте настольное приложение "Службы". Нажмите Windows+R, чтобы открыть окно «Выполнить», введите services.msc, а затем нажмите клавишу ВВОД или выберите ОК.

Вы должны увидеть свою службу в списке Служб, отображаемом в алфавитном порядке по отображаемому имени, которое вы для нее установили.

MyNewService в окно

Чтобы запустить службу, выберите "Пуск" в контекстном меню службы.

Чтобы остановить службу, выберите "Остановить" в контекстном меню службы.

(Необязательно) В командной строке используйте команды net start и net stop для запуска и остановки службы.

Проверьте выходные данные журнала событий вашей службы

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

В Visual Studio вы можете получить доступ к журналам событий, открыв обозреватель сервера из меню "Вид" (или нажав Ctrl+Alt+S) и развернув узел "Журналы событий" для локального компьютера.

В средстве просмотра событий разверните Журналы приложений и служб.

Найдите список для MyNewLog (или MyLogFile1, если вы следовали процедуре добавления аргументов командной строки) и разверните его. Вы должны увидеть записи для двух действий (запуск и остановка), которые выполняла ваша служба.

Используйте средство просмотра событий, чтобы просмотреть записи журнала событий

Очистить ресурсы

Если вам больше не нужно служебное приложение Windows, вы можете удалить его.

Откройте командную строку разработчика для Visual Studio с учетными данными администратора.

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

Введите следующую команду:

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

Дальнейшие шаги

Теперь, когда вы создали службу, вы можете:

Создайте автономную программу установки, чтобы другие могли использовать ее для установки вашей службы Windows. Используйте набор инструментов WiX, чтобы создать установщик для службы Windows. Другие идеи см. в разделе Создание пакета установки.

Изучите компонент ServiceController, который позволяет отправлять команды установленной службе.

Вместо создания журнала событий при запуске приложения используйте программу установки для создания журнала событий при установке приложения. Журнал событий удаляется установщиком при удалении приложения. Дополнительные сведения см. в разделе EventLogInstaller.

Есть ли какой-либо быстрый способ, используя исполняемый файл, создать службу Windows, которая при запуске запускает его?

10 ответов 10

Чтобы создать службу Windows из исполняемого файла, вы можете использовать sc.exe :

Вы должны иметь кавычки вокруг фактического пути к exe и пробел после binPath= .

Обратите внимание, что это не будет работать для любого исполняемого файла: исполняемый файл должен быть службой Windows (т. е. реализовывать ServiceMain). При регистрации неслужебного исполняемого файла в качестве службы вы получите следующую ошибку при попытке запустить службу:

Ошибка 1053. Служба не ответила на запрос запуска или управления своевременно.

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


вам (почти наверняка) придется запускать командную строку от имени администратора, чтобы эта команда работала

Путь также должен быть полным путем — мне не удалось запустить службу с использованием относительного пути.

пробел после binpath= вместе с необходимостью заключать путь к исполняемому файлу в двойные кавычки совершенно неверен, по крайней мере, для Windows 10. заключение в кавычки требуется тогда и только тогда, когда путь содержит специальные символы, такие как пробелы. Кроме того, регистр (нижний/верхний/смешанный регистр) нигде не имеет значения, в том числе и в именах переменных, а displayname="my service" — еще одна полезная функция, которую можно передать в командной строке при создании службы для просмотра в первой строке ( Name ) в services.msc .

Используйте NSSM (независимый Service Manager) для запуска .BAT или любого .EXE-файла в качестве службы.

  • Шаг 1. Загрузите NSSM
  • Шаг 2. Установите службу с помощью nssm.exe install [serviceName]
  • Шаг 3. Откроется графический интерфейс, который вы будете использовать для поиска исполняемого файла.


является ли этот набор услугой навсегда?каждый раз при запуске Windows служба будет запускаться? также как я могу сделать это без взаимодействия с пользователем? скрипт или какой-то код?

Должен ли исполняемый файл быть проектом службы Windows, чтобы иметь возможность работать с nssm, или это может быть обычный исполняемый файл?, потому что, когда я использую nssm start [servicename], он показывает ошибку, например, служба Windows может' не запускать из командной строки и т. д.

Дополнительный ответ (Кевин Тонг).

Шаг 1. Загрузите и распакуйте файл nssm-2.24.zip

Шаг 2. Из типа командной строки:

C:\> nssm.exe установить [название службы]

откроется графический интерфейс, как показано ниже (пример: сервер UT2003), а затем просто перейдите к: yourapplication.exe

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

Исправьте синтаксис nssm.exe install [serviceName] . Это решение работает, но если у вас есть приложение с графическим интерфейсом, оно не будет работать на Win Serever2003. Если позже вы захотите удалить его, используйте nssm.exe remove [youservicename]

Я предполагаю, что ссылка на nginx связана с тем, что это конкретная программа, которую вы хотите запускать как службу? Пока я не увидел комментарий hmd выше, я думал, что вы пытаетесь помочь, подразумевая, что nginx является необходимой зависимостью для установки или что-то в этом роде. но тогда в графическом интерфейсе кажется, что вы устанавливаете не nginx, а сервер Unreal Tournament? Просто указываю, что пример непоследовательный и потенциально вводящий в заблуждение. Простое «Предположим, вы хотите установить nginx как службу, тогда это будет выглядеть так:» поможет.

@flutefreak7 yes nginx не нужен и вводит в заблуждение. Команда будет работать и без него. Это необязательный параметр, если вы хотите указать имя службы из командной строки.

Многие существующие ответы включают вмешательство человека во время установки. Это может быть процесс, подверженный ошибкам. Если у вас есть много исполняемых файлов, которые вы хотите установить в качестве служб, последнее, что вам нужно сделать, — это выполнить их вручную во время установки.

Для описанного выше сценария я создал serman, инструмент командной строки для установки исполняемого файла в качестве службы. Все, что вам нужно написать (и написать только один раз), — это простой файл конфигурации службы вместе с вашим исполняемым файлом. Выполнить

установит службу. stdout и stderr регистрируются. Для получения дополнительной информации посетите веб-сайт проекта.

Как показано ниже, рабочий файл конфигурации очень прост. Но он также имеет много полезных функций, таких как и

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

Если в названии службы есть пробелы, заключите их в кавычки.



То же, что и ответ Сергея Пожарова, но с командлетом PowerShell:

Дополнительные сведения о настройке см. в разделе New-Service.

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


Я протестировал для этого хороший продукт: AlwaysUp. Не бесплатно, но у них есть 30-дневный пробный период, так что вы можете попробовать.

Несколько лет назад я создал кроссплатформенное программное обеспечение Service Manager, чтобы иметь возможность запускать PHP и другие языки сценариев в качестве системных служб в ОС Windows, Mac и Linux:

Service Manager – это набор предварительно скомпилированных двоичных файлов, которые устанавливают и управляют системной службой в целевой ОС с использованием почти идентичных параметров командной строки (также доступен исходный код). Каждая платформа имеет небольшие различия, но основные функции в основном стандартизированы.

Если дочерний процесс умирает, Service Manager автоматически перезапускает его.

Процессы, запущенные с помощью Service Manager, должны периодически отслеживать два файла уведомлений для обработки запросов на перезагрузку и перезагрузку, но это необязательно. Service Manager принудительно перезапустит дочерний процесс, если он не отвечает своевременно на управляемые запросы на перезапуск/перезагрузку.

Присоединяйтесь к сообществу DZone и получите все возможности участника.

Введение

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

Вы можете найти услуги следующими способами

  • Перейдите в панель управления и выберите "Службы" в разделе "Инструменты администрирования".
  • Откройте окно "Выполнить" (Window + R), введите services.msc и нажмите клавишу ввода.

Как создать службу Windows

Шаг 1

Откройте Visual Studio, выберите «Файл» > «Создать» и выберите «Проект». Теперь выберите новый проект в диалоговом окне, выберите «Window Service» и нажмите кнопку «ОК».

служба Windows

Шаг 2

 служба Windows

После того, как вы нажмете OK, появится показанный ниже экран, который является вашей службой

 служба Windows

Шаг 3

Нажмите правой кнопкой мыши пустую область и выберите "Добавить установщик".

Добавление установщиков в службу

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

 служба Windows

После добавления установщика ProjectInstaller добавит в ваш проект и откроет файл ProjectInstakker.cs. Не забудьте все сохранить (нажав ctrl+shift+s)

 служба Windows

Обозреватель решений выглядит следующим образом:

 служба Windows

Шаг 4

Щелкните правой кнопкой мыши пустую область и выберите "Просмотреть код"

 служба Windows

Шаг 5

У него есть конструктор, который содержит метод InitializeComponent.

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

 служба Windows

Очень важно: никогда не пытайтесь вызывать какой-либо метод до вызова метода InitializeComponent.

Шаг 6

Выберите метод InitializeComponent и нажмите клавишу F12, чтобы перейти к определению.

 служба Windows

Шаг 7

Теперь добавьте следующую строку при установке службы:

Вы также можете добавить описание и отобразить название службы (необязательно).

 служба Windows

Шаг 8

На этом шаге мы реализуем таймер и код для вызова службы в заданное время. Мы создадим простую запись в текстовом файле.

 служба Windows

Класс Service1.cs

Объяснение кода: приведенный выше код будет вызывать службу каждые 5 секунд и создавать папку, если ее не существует, и писать наше сообщение.

Шаг 9. Перестройте приложение

Щелкните правой кнопкой мыши свой проект или решение и выберите "Перестроить".

 служба Windows

Шаг 10

Найдите «Командная строка» и запустите программу от имени администратора:

 служба Windows

Шаг 11

Выполните приведенную ниже команду в командной строке и нажмите Enter.

Шаг 12

Теперь перейдите в исходную папку проекта > bin > Debug и скопируйте полный путь к файлу Windows Service.exe

 служба Windows
служба Windows

Шаг 13

Откройте командную строку, запустите приведенную ниже команду и нажмите клавишу ввода.

Синтаксис

InstallUtil.exe + Ваш скопированный путь + \ваше имя службы + .exe

Наш путь

 служба Windows
Шаг 14

Откройте сервисы, выполнив следующие действия:

  1. Нажмите клавишу "Окно" + R.
  2. Введите services.msc
  3. Найдите свой сервис.

 служба Windows

 служба Windows

 служба Windows

Результаты службы

 служба Windows

Папка журнала будет создана в вашей папке bin.

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

  1. Синтаксис InstallUtil.exe -u + Ваш скопированный путь + \ваше имя службы + .exe
  2. Наш путь InstallUtil.exe -u C:\Users\Faisal-Pathan\source\repos\MyFirstService\MyFirstService\bin\Debug\MyFirstService.exe

Обзор

В этой статье мы узнали, как создать службу Windows и установить/удалить ее с помощью InstallUtil.exe из командной строки.

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

Я также загрузил этот проект на GitHub, здесь.

Опубликовано на DZone с разрешения Faisal Pathan. Смотрите оригинальную статью здесь.

Читайте также: