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

Классы ServiceProcessInstaller и ServiceInstaller

Классы 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. Эту конфигурацию можно будет изменить позднее, когда все будет работать правильно.

Оглавление книги


Генерация: 1.613. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз