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

Эту конфигурацию можно сделать с помощью классов установки из пространства имен System.ServiceProcess
.
Программы установки
Можно добавить программу установки в службу, переключаясь в представление конструктора в Visual Studio.NET и выбирая параметр Add Installer из контекстного меню. С помощью этого параметра создается новый класс ProjectInstaller
и экземпляры ServiceProcessInstaller
и ServiceInstaller
:

Диаграмма классов установки для служб должна помочь пониманию созданного мастером кода:

Помня об этой диаграмме, пройдем через исходный код в файле ProjectInstaller.cs
, созданный с помощью параметра Add Installer.
Класс Installer
Класс ProjectInstaller
выводится из класса System.Configuration.Install.Installer
. Класс Installer
является базовым классом для всех специальных классов установки. С его помощью создается установка на основе транзакций, при которой можно вернуться в предыдущее состояние, если установка отказывает. При откате все изменения, сделанные при установке, будут отменены. Как можно видеть на диаграмме, класс Installer
имеет методы Install()
, Commit()
, Rollback()
и Uninstall ()
, вызываемые из программ установки.
Атрибут RunInstaller(true)
означает, что при установке сборки должен вызываться класс ProjectInstaller
. Специальные программы установки действий, а также утилита installutil.exe
(которая будет использоваться позднее) проверяют атрибут:
using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
namespace Wrox.ProfessionalCSharp {
/// <summary>
/// Краткое описание ProjectInstaller
/// </summary>
[RunInstaller(true)]
public class ProjectInstaller : System.Configuration.Install.Installer {
Классы ServiceProcessInstaller и ServiceInstaller
Аналогично приложениям Windows Forms метод InitializeComponent()
вызывается внутри конструктора класса ProjectInstaller
. В методе InitializeComponent()
создается экземпляр класса ServiceProcessInstaller
и класса ServiceInstaller
. Оба эти класса выводятся из класса ComponentInstaller
, который сам является Installer
.
Классы, производные из ComponentInstaller
, используются как части процесса установки. Помните, что служебный процесс может включать более одной службы. Класс ServiceProcessInstaller
применяется для части процесса установки, а класс ServiceInstaller
для части службы, поэтому один экземпляр ServiceInstaller
требуется для каждой службы. Если в процессе имеется три службы, то необходимо добавить дополнительные объекты ServiceInstaller
, в таком случае понадобятся три экземпляра ServiceInstaller
.
private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
private System.ServiceProcess.ServiceInstaller serviceInstaller1;
/// <summary>
/// требуемые переменные конструктора.
/// </summary>
private System.ComponentModel.Container components;
public ProjectInstaller() {
// Этот вызов затребован конструктором.
InitializeComponent();
// TODO: добавить инициализацию после вызова InitComponent
}
/// <summary>
/// Требуемый метод для поддержки конструктора — не изменяйте
/// содержимое этого метода с помощью редактора кода.
/// </summary>
private void InitializeComponent() {
this.serviceProcessInstaller1 =
new System.ServiceProcess.ServiceProcessInstaller();
this.serviceInstaller1 =
new System.ServiceProcess.ServiceInstaller();
//
// serviceProcessInstaller1
//
this.serviceProcessInstaller1.Password = null;
this.serviceProcessInstaller1.UserName = null;
//
// serviceInstaller1
//
this.serviceInstaller1.ServiceName = 'QuoteService';
//
// ProjectInstaller
//
this.Installers.AddRange(
new System.Configuration.Install.Installer[] {
this.serviceProcessInstaller1, this.serviceInstaller1});