- Создание на C# службы Windows в Visual Studio 2015
- Приложение Windows Forms
- Разработка логики
- Создание службы
- Тестирование службы
- Особенности служб Windows
- Ссылки
- Разработка приложений службы Windows Develop Windows service apps
- Содержание раздела In this section
- Связанные разделы Related sections
- Практическое руководство. Создание службы программным способом How to: Write Services Programmatically
- Создание службы программным способом To write a service programmatically
- Практическое руководство. Создание служб Windows How to: Create Windows Services
- Создание приложения службы Windows To create a Windows Service application
Создание на C# службы Windows в Visual Studio 2015
Хочу описать процесс создание и тестирования службы Windows на C#. В качестве среды разработки буду использовать Visual Studio 2015. В качестве примера создам службу, которая пишет в файл данные о событиях. Исходный код проекта доступен на GitHub.
Для создания службы я создаю решение с тремя проектами:
Приложение Windows Forms
Создание новой службы начинается, с создания windows приложения (шаблон проекта «Приложение Windows Forms»). Оно нам понадобится для тестирования службы. Приложение будет состоять из одной формы:
Разработка логики
На втором этапе создается проект «Библиотека классов». Именно здесь создаются классы описывающие логику работы будущей службы. Выделение логики в библиотеку классов позволяют нам пока не думать о реализации службы, а вести разработка стандартной windows программы. Плюсом такого подхода является: простота тестирования, легкость повторного использования кода, возможность создания автоматических тестов. В данном примере в библиотеке классов мы создадим только один класс:
Для тестирования — используем приложение созданное на первом этапе.
Создание службы
Когда логика новой службы написана и оттестирована, приступаем к созданию службы. В качестве шаблона используем стандартный шаблон: «Служба Windows». Реализация службы должна выглядеть примерно так:
Не забываем вставлять ссылку на библиотеку классов. Настраиваем установку службы.
Тестирование службы
Для финального тестирования возвращаемся к приложению Windows Form. Добавляем в него ссылку на созданную службу и создаем новый класс производный от класса описывающего созданную службу:
Создание этого класса позволяет нам вызывать методы службы из диалогового окна нашего приложения. Для примера — эмуляция старта службы:
После тестирования — можно разворачивать нашу службу.
Особенности служб Windows
Написав свою первую службу по работе с БД, столкнулся с загадочной ошибкой. При тестировании все работало замечательно, но периодически, при перезагрузке компьютера, служба не стартовала. Оказалось, что если сервер БД не успевал запуститься к моменту старта моей службы — возникала ошибка. Поэтому, когда пишите службу, необходимо понимать, какие приложения вы используете и будут ли они доступны в момент запуска службы
Ссылки
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Разработка приложений службы Windows Develop Windows service apps
С помощью Visual Studio или пакета SDK для .NET Framework можно легко создавать службы. Просто создайте приложение, которое устанавливается как служба. Using Visual Studio or the .NET Framework SDK, you can easily create services by creating an application that is installed as a service. Такие приложения называются службами Windows. This type of application is called a Windows service. Используя компоненты платформы, можно создавать, устанавливать, запускать, останавливать и администрировать службы. With framework features, you can create services, install them, and start, stop, and otherwise control their behavior.
В Visual Studio можно создать службы с помощью управляемого кода на Visual C# или Visual Basic, который при необходимости может взаимодействовать с существующим кодом C++. In Visual Studio you can create a service in managed code in Visual C# or Visual Basic, which can interoperate with existing C++ code if required. Или можно создать службу Windows на машинном языке C++ с помощью мастера проектов ATL. Or, you can create a Windows service in native C++ by using the ATL Project Wizard.
Содержание раздела In this section
Сведения о приложениях служб Windows, времени существования служб и отличиях приложений служб от распространенных типов проектов. Provides an overview of Windows service applications, the lifetime of a service, and how service applications differ from other common project types.
Пример создания службы на Visual Basic и Visual C#. Provides an example of creating a service in Visual Basic and Visual C#.
Описание элементов языка, используемых при создании служб. Explains the language elements used in service programming.
Создание и настройка служб Windows с помощью шаблона проекта службы Windows. Describes the process of creating and configuring Windows services using the Windows service project template.
Связанные разделы Related sections
ServiceBase — описываются основные характеристики класса ServiceBase, который используется для создания служб. ServiceBase — Describes the major features of the ServiceBase class, which is used to create services.
ServiceProcessInstaller — описываются возможности класса ServiceProcessInstaller, который используется вместе с классом ServiceInstaller для установки и удаления службы. ServiceProcessInstaller — Describes the features of the ServiceProcessInstaller class, which is used along with the ServiceInstaller class to install and uninstall your services.
ServiceInstaller — описываются возможности класса ServiceInstaller, который используется вместе с классом ServiceProcessInstaller для установки и удаления службы. ServiceInstaller — Describes the features of the ServiceInstaller class, which is used along with the ServiceProcessInstaller class to install and uninstall your service.
Create Projects from Templates (Создание проектов на основе шаблонов) — описываются типы проектов, которые используются в этом разделе, и способ их выбора. Create Projects from Templates — Describes the projects types used in this chapter and how to choose between them.
Практическое руководство. Создание службы программным способом How to: Write Services Programmatically
Если вы решили не использовать шаблон проекта «Служба Windows», для создания собственной службы вам придется настроить наследование и другие элементы инфраструктуры самостоятельно. If you choose not to use the Windows Service project template, you can write your own services by setting up the inheritance and other infrastructure elements yourself. Создавая службу программным способом, вам необходимо выполнить несколько действий, которые в случае с шаблоном выполняются автоматически. When you create a service programmatically, you must perform several steps that the template would otherwise handle for you:
Для класса службы необходимо настроить наследование от класса ServiceBase. You must set up your service class to inherit from the ServiceBase class.
Для проекта службы необходимо создать метод Main , который определяет запускаемые службы и вызывает для них метод Run. You must create a Main method for your service project that defines the services to run and calls the Run method on them.
Необходимо переопределить процедуры OnStart и OnStop и добавить код, который они должны выполнять. You must override the OnStart and OnStop procedures and fill in any code you want them to run.
Создание службы программным способом To write a service programmatically
Создайте пустой проект, а затем создайте ссылку на необходимые пространства имен. Create an empty project and create a reference to the necessary namespaces by following these steps:
В окне Обозреватель решений щелкните правой кнопкой мыши узел Ссылки и выберите пункт Добавить ссылку. In Solution Explorer, right-click the References node and click Add Reference.
На вкладке .NET Framework найдите System.dll и щелкните Выбрать. On the .NET Framework tab, scroll to System.dll and click Select.
Найдите System.ServiceProcess.dll и щелкните Выбрать. Scroll to System.ServiceProcess.dll and click Select.
Нажмите кнопку ОК. Click OK.
Добавьте класс и настройте для него наследование от ServiceBase. Add a class and configure it to inherit from ServiceBase:
Настройте класс службы, добавив следующий код: Add the following code to configure your service class:
Создайте для класса метод Main и с его помощью определите службы, которые будет содержать класс. userService1 — имя класса. Create a Main method for your class, and use it to define the service your class will contain; userService1 is the name of the class:
Переопределите метод OnStart и укажите обработку, которая должна выполняться при запуске службы. Override the OnStart method, and define any processing you want to occur when your service is started.
Переопределите все прочие методы, для которых нужно задать определенную обработку, и напишите код, благодаря которому служба будет понимать, что нужно делать в каждом случае. Override any other methods you want to define custom processing for, and write code to determine the actions the service should take in each case.
Добавить установщики, необходимые для приложения службы. Add the necessary installers for your service application. Дополнительные сведения см. в разделе Практическое руководство. Добавление установщиков в приложение-службу. For more information, see How to: Add Installers to Your Service Application.
Скомпилируйте проект, выбрав в меню Сборка пункт Собрать решение. Build your project by selecting Build Solution from the Build menu.
Не нажимайте клавишу F5 для запуска проекта — таким способом нельзя запустить проект службы. Do not press F5 to run your project — you cannot run a service project in this way.
Создайте проект установки и настраиваемые действия для установки службы. Create a setup project and the custom actions to install your service. Пример см. в разделе Пошаговое руководство. Создание приложения служб Windows в конструкторе компонентов. For an example, see Walkthrough: Creating a Windows Service Application in the Component Designer.
Установите службу. Install the service. Дополнительные сведения см. в разделе Практическое руководство. Установка и удаление служб. For more information, see How to: Install and Uninstall Services.
Практическое руководство. Создание служб Windows How to: Create Windows Services
При создании службы можно использовать шаблон проекта Visual Studio, который называется Служба Windows. When you create a service, you can use a Visual Studio project template called Windows Service. Этот шаблон автоматически выполняет основную часть работы, ссылаясь на необходимые классы и пространства имен, устанавливая наследование от базового класса для служб и переопределяя некоторые методы, которые вы обычно хотите переопределять. This template automatically does much of the work for you by referencing the appropriate classes and namespaces, setting up the inheritance from the base class for services, and overriding several of the methods you’re likely to want to override.
Шаблон проекта «Службы Windows» в экспресс-выпуске Visual Studio отсутствует. The Windows Services project template is not available in the Express edition of Visual Studio.
Для создания функциональной службы необходимо выполнить, как минимум, следующее: At a minimum, to create a functional service you must:
Задайте свойство ServiceName. Set the ServiceName property.
Создайте установщики, необходимые для приложения службы. Create the necessary installers for your service application.
Переопределите и задайте код для методов OnStart и OnStop для настройки режимов поведения службы. Override and specify code for the OnStart and OnStop methods to customize the ways in which your service behaves.
Создание приложения службы Windows To create a Windows Service application
Создайте проект Служба Windows. Create a Windows Service project.
Инструкции по созданию службы без использования шаблона см. в разделе Практический пример. Создание служб программным способом. For instructions on writing a service without using the template, see How to: Write Services Programmatically.
В окне Свойства задайте для своей службы свойство ServiceName. In the Properties window, set the ServiceName property for your service.
Значение ServiceName свойства всегда должно соответствовать имени, указанному в классах установщика. The value of the ServiceName property must always match the name recorded in the installer classes. При изменении этого свойства необходимо также обновить свойство ServiceName классов установщика. If you change this property, you must update the ServiceName property of installer classes as well.
Установите любые из следующих свойств для определения режима работы службы. Set any of the following properties to determine how your service will function.
Свойство. Property | Параметр Setting |
---|---|
CanStop | True , чтобы указать, что служба может принимать запросы на останов работы; false для предотвращения останова службы. True to indicate that the service will accept requests to stop running; false to prevent the service from being stopped. |
CanShutdown | True , чтобы указать, что служба хочет принимать уведомления о выключении компьютера, на котором она работает, позволяя ему вызывать процедуру OnShutdown. True to indicate that the service wants to receive notification when the computer on which it lives shuts down, enabling it to call the OnShutdown procedure. |
CanPauseAndContinue | True , чтобы указать, что служба может принимать запросы на приостановку или возобновление выполнения; false для предотвращения приостановки и возобновления работы службы. True to indicate that the service will accept requests to pause or to resume running; false to prevent the service from being paused and resumed. |
CanHandlePowerEvent | True , чтобы указать, что служба может обрабатывать уведомления об изменениях состояния питания компьютера; false , чтобы не сообщать службе об этих изменениях. True to indicate that the service can handle notification of changes to the computer’s power status; false to prevent the service from being notified of these changes. |
AutoLog | True для внесения информационных записей в журнал событий приложения, когда служба выполняет некоторое действие; false для отключения этой функции. True to write informational entries to the Application event log when your service performs an action; false to disable this functionality. Дополнительные сведения см. в разделе Практическое руководство. Запись сведений о службах в журнал. For more information, see How to: Log Information About Services. Примечание. По умолчанию свойство AutoLog имеет значение true . Note: By default, AutoLog is set to true . |
Когда CanStop или CanPauseAndContinue имеют значение false , диспетчер служб будет отключать пункты меню, отвечающие за остановку, приостановку или возобновление работы службы. When CanStop or CanPauseAndContinue are set to false , the Service Control Manager will disable the corresponding menu options to stop, pause, or continue the service.
Откройте редактор кода и введите данные для выполнения операций для процедур OnStart и OnStop. Access the Code Editor and fill in the processing you want for the OnStart and OnStop procedures.
Переопределите все прочие методы, для которых необходимо определить функциональные возможности. Override any other methods for which you want to define functionality.
Добавить установщики, необходимые для приложения службы. Add the necessary installers for your service application. Дополнительные сведения см. в разделе Практическое руководство. Добавление установщиков в приложение-службу. For more information, see How to: Add Installers to Your Service Application.
Скомпилируйте проект, выбрав в меню Сборка пункт Собрать решение. Build your project by selecting Build Solution from the Build menu.
Не нажимайте клавишу F5 для запуска проекта — таким способом нельзя запустить проект службы. Do not press F5 to run your project — you cannot run a service project in this way.
Установите службу. Install the service. Дополнительные сведения см. в разделе Практическое руководство. Установка и удаление служб. For more information, see How to: Install and Uninstall Services.