Ватсон Карли
Шрифт:
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
, это диалоговое окно будет автоматически выводиться во время установки. Также можно в это время отменить установку: InstallUtil
После добавления в проект классов для установки можно воспользоваться утилитой
installutil.exe
для установки и удаления cлужбы. Ввод командной строки для этих действий выглядит соответственно: installutil quoteservice.exe
installutil /u quoteservice.exe
Если установка отказывает, проверьте файлы регистрации установки
InstallUtil.InstallLog
и <имя_службы>.InstallLog
. Там можно найти очень полезную информацию, такую как "Указанная служба уже существует".