помощью 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});

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату