Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Эта статья не относится к размещенным службам в .NET. Последние сведения об использовании Microsoft.Extensions.Hosting.BackgroundService служб Windows и шаблоне рабочей службы см. в следующих статье:
Службы Microsoft Windows, ранее известные как службы NT, позволяют создавать длительные исполняемые приложения, работающие в собственных сеансах Windows. Эти службы можно запускать автоматически при загрузке компьютера, можно приостановить и перезапустить, а также не отображать пользовательский интерфейс. Эти функции делают службы идеальными для использования на сервере или всякий раз, когда вам нужны длительные функциональные возможности, которые не вмешиваются в работу с другими пользователями, работающими на одном компьютере. Вы также можете запускать службы в контексте безопасности определенной учетной записи пользователя, отличной от пользователя, вошедшего в систему, или учетной записи компьютера по умолчанию. Дополнительные сведения о службах и сеансах Windows см. в документации по пакету SDK для Windows.
Вы можете легко создавать службы, создавая приложение, установленное в качестве службы. Например, предположим, что вы хотите отслеживать данные счетчика производительности и реагировать на пороговые значения. Вы можете написать приложение службы Windows, которое прослушивает данные счетчика производительности, развертывает приложение и начинает собирать и анализировать данные.
Вы создаете службу в качестве проекта Microsoft Visual Studio, определяя код в нем, который управляет тем, какие команды можно отправлять в службу, и какие действия следует предпринять при получении этих команд. Команды, которые можно отправлять в службу, включают запуск, приостановку, возобновление и остановку службы; вы также можете выполнять пользовательские команды.
После создания и сборки приложения его можно установить, выполнив программу командной строки InstallUtil.exe и передав путь к исполняемому файлу службы. Затем можно использовать диспетчер управления службами для запуска, остановки, приостановки, возобновления работы и настройки службы. Вы также можете выполнить многие из этих же задач на узле служб в обозревателе серверов или с помощью ServiceController класса.
Приложения-службы и другие приложения Visual Studio
Приложения-службы работают по-разному от многих других типов проектов несколькими способами:
Скомпилированный исполняемый файл, создаваемый проектом приложения-службы, должен быть установлен на сервере, прежде чем проект может функционировать в понятном виде. Невозможно отладить или запустить приложение-службу, нажав F5 или F11; вы не можете сразу запустить службу или войти в ее код. Вместо этого необходимо установить и запустить службу, а затем подключить отладчик к процессу службы. Дополнительные сведения см. в разделе "Практическое руководство. Отладка приложений службы Windows".
В отличие от некоторых типов проектов, необходимо создать компоненты установки для приложений-служб. Компоненты установки устанавливают и регистрируют службу на сервере и создают запись для вашей службы в диспетчере управления службами Windows. Дополнительные сведения см. в разделе "Практическое руководство. Добавление установщиков в приложение службы".
Метод
Mainприложения-службы должен выдавать команду Run для служб, содержащихся в проекте. МетодRunзагружает службы в диспетчер управления службами на соответствующем сервере. Если вы используете шаблон проекта служб Windows , этот метод записывается автоматически. Обратите внимание, что загрузка службы не совпадает с запуском службы. Дополнительные сведения см. в разделе "Время существования службы" ниже.Приложения службы Windows выполняются в другой окне станции, отличной от интерактивной станции пользователя, вошедшего в систему. Станция окон — это безопасный объект, содержащий буфер обмена, набор глобальных атомов и группу объектов рабочего стола. Поскольку станция службы Windows не является интерактивной, диалоговые окна, поднятые из приложения службы Windows, не будут замечены и могут привести к остановке реагирования программы. Аналогичным образом сообщения об ошибках должны регистрироваться в журнале событий Windows, а не вызываться в пользовательском интерфейсе.
Классы служб Windows, поддерживаемые .NET Framework, не поддерживают взаимодействие с интерактивными станциями, то есть пользователем, вошедшего в систему. Платформа .NET Framework также не включает классы, представляющие станции и настольные компьютеры. Если служба Windows должна взаимодействовать с другими станциями, вам потребуется получить доступ к неуправляемого API Windows. Дополнительные сведения см. в документации по пакету SDK для Windows.
Взаимодействие службы Windows с пользователем или другими станциями должно быть тщательно продумано, чтобы охватывать сценарии, например, отсутствие активного пользователя в системе или наличие неожиданного набора объектов на рабочем столе. В некоторых случаях может быть более уместным написать приложение Windows, которое работает под управлением пользователя.
Приложения службы Windows выполняются в собственном контексте безопасности и запускаются до входа пользователя на компьютер Windows, на котором они установлены. Необходимо тщательно спланировать, какую учетную запись пользователя следует запустить в службе; Служба, запущенная под системной учетной записью, имеет больше разрешений и привилегий, чем учетная запись пользователя.
Время существования службы
Служба проходит через несколько внутренних состояний в течение своего существования. Во-первых, служба устанавливается в систему, в которой она будет выполняться. Этот процесс выполняет установочные файлы для проекта службы и загружает службу в Диспетчер служб для этого компьютера. Диспетчер управления службами — это центральная программа, предоставляемая Windows для администрирования служб.
После загрузки службы его необходимо запустить. Запуск службы позволяет начать работу. Вы можете запустить службу из диспетчера управления службами, из обозревателя серверов или из кода, вызвав Start метод. Метод Start передает обработку методу приложения OnStart и обрабатывает любой код, определенный там.
Запущенная служба может существовать в этом состоянии на неопределенный срок, пока она не будет остановлена, приостановлена или пока компьютер не завершит работу. Служба может существовать в одном из трех основных состояний: Runningили PausedStopped. Служба также может сообщать о состоянии ожидающей команды: ContinuePending, PausePending, StartPending или StopPending. Эти состояния указывают на то, что была выдана команда, например команда для приостановки запуска службы, но еще не выполнена. Вы можете запросить Status , чтобы определить, в каком состоянии находится служба, или использовать WaitForStatus его для выполнения действия при возникновении любого из этих состояний.
Вы можете приостановить, остановить или возобновить работу службы из диспетчера управления службами, из обозревателя серверов или путем вызова методов в коде. Каждое из этих действий может вызывать связанную процедуру в службе (OnStopилиOnPauseOnContinue), в которой можно определить дополнительную обработку, выполняемую при изменении состояния службы.
Типы служб
Существует два типа служб, которые можно создать в Visual Studio с помощью .NET Framework. Службы, которые являются единственной службой в процессе, назначаются типу Win32OwnProcess. Службам, которым предоставляется общий доступ к процессу с другой службой, назначается тип Win32ShareProcess. Чтобы получить тип службы, выполните запрос к свойству ServiceType .
Иногда могут отображаться другие типы служб, если запрашивать существующие службы, которые не были созданы в Visual Studio. Дополнительные сведения об этих параметрах см. в разделе ServiceType.
Службы и компонент ServiceController
Компонент ServiceController используется для подключения к установленной службе и управления его состоянием; с помощью ServiceController компонента можно запустить и остановить службу, приостановить работу и продолжить работу и отправить пользовательские команды в службу. Однако при создании приложения-службы не требуется использовать ServiceController компонент. В большинстве случаев компонент ServiceController должен существовать в отдельном приложении от приложения службы Windows, определяющего службу.
Дополнительные сведения см. в разделе ServiceController.
Требования
Службы должны создаваться в проекте приложения службы Windows или другом проекте с поддержкой .NET Framework, который создает файл .exe при создании и наследовании от ServiceBase класса.
Проекты, содержащие службы Windows, должны иметь компоненты установки для проекта и ее служб. Это можно легко сделать из окна "Свойства ". Дополнительные сведения см. в разделе "Практическое руководство. Добавление установщиков в приложение службы".
См. также
- Приложения службы Windows
- Архитектура программирования приложений службы
- Практическое руководство. Создание служб Windows
- Практическое руководство. Установка и удаление служб
- Практическое руководство. Запуск служб
- Практическое руководство. Отладка приложений службы Windows
- Пошаговое руководство. Создание приложения службы Windows в конструкторе компонентов
- Как добавить установщики в ваше приложение-службу