Чтение онлайн

ЖАНРЫ

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

Атрибут

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});

}

 }

}

ServiceProcessInstaller
устанавливает исполняемый файл, который реализует класс
ServiceBase
.
ServiceProcessInstaller
имеет свойства для всего процесса и для всех служб внутри процесса:

Свойства
ServiceProcessInstaller
Username
,
Password
Указывают учетную запись пользователя, с которой выполняется служба, если свойство
RunUnderSystemAccount
задано как false.
Account
С помощью этого свойства можно определить, будет ли служба выполняться с системной учетной записью.
HelpText
Свойство только для чтения, которое возвращает справочный текст для задания имени пользователя и пароля.

ServiceInstaller
является классом, необходимым для каждой службы. Он имеет свойства, уникальные для каждой службы внутри процесса:
StartType
,
DisplayName
,
ServiceName
и
ServiceDependedOn
:

Свойства
ServiceInstaller
StartType
Указывает, запускается ли служба автоматически или вручную. Возможные значения:
ServiceStartMode.Automatic
,
ServiceStartMode.Manual
,
ServiceStartMode.Disabled
.
DisplayName
Является именем службы, которое выводится пользователю. Это имя используется также многими утилитами управления для контроля и мониторинга службы.
ServiceName
Является именем службы. Это значение должно быть идентично свойству
ServiceName
класса
ServiceBase
в программе службы.
ServicesDependentOn
Определяет массив служб, которые должны запускаться, прежде чем можно будет запустить эту службу. Когда служба запускается, все подчиненные службы запускаются автоматически.

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

ServiceBase
, то также необходимо изменить свойство
ServiceName
в объекта
ServiceInstaller
.

Во время тестирования задавайте

StartType
как Manual (вручную). Если остановка службы откажет, этот процесс нельзя уничтожить, так как он будет сконфигурирован для выполнения в контексте учетной записи System. Эту конфигурацию можно будет изменить позднее, когда все будет работать правильно.

ServiceInstallerDialog

Другим классом установки в пространстве имен

System.ServiceProcess.Design
является
ServiceInstallerDialog
. Если желательно, чтобы системный администратор вводил имя пользователя и пароль во время установки, может использоваться этот класс.

Если задать свойства

Username
и
Password
класса
ServiceProcessInstaller
как
null
, это диалоговое окно будет автоматически выводиться во время установки. Также можно в это время отменить установку:

Поделиться с друзьями: