Следуя инструкциям, приведенным в http://msdn.microsoft.com/en-us/library/zt39148a.aspx#Y684,, я создал службу Windows, которую успешно установил и протестировал. Но я озадачен чем-то в компонентах, используемых для установки сервиса.
Установка службы выполняется с помощью сгенерированного дизайнером класса ProjectInstaller
, показанного ниже. Этот класс используется installutil.exe
(в .NET Framework) для установки службы и связанного с ней процесса службы. Сгенерированный дизайнером код создает два объекта установщика: MyServiceInstaller
для службы и MyServiceProcessInstaller
для процесса службы, который будет использоваться installutil.exe
во время установки. Тем не менее, он вставляет только последний в коллекцию Installers
.
Так как сам сервис устанавливается? Существует ли «служба по умолчанию» для процесса обслуживания, если никакие службы не установлены явно вместе с процессом обслуживания?
КОД:
(Если вы поэкспериментируете с этим, вы обнаружите, что Дизайнер фактически создает этот класс, используя два частичных класса. Я для простоты объединил их в один класс.)
namespace MyService
{
[RunInstaller(true)]
public class ProjectInstaller : System.Configuration.Install.Installer
{
public ProjectInstaller()
{
InitializeComponent();
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.MyServiceProcessInstaller = new System.ServiceProcess.ServiceProcessInstaller();
this.MyServiceInstaller = new System.ServiceProcess.ServiceInstaller();
//
// MyServiceProcessInstaller
//
this.MyServiceProcessInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
this.MyServiceProcessInstaller.Password = null;
this.MyServiceProcessInstaller.Username = null;
//
// MyServiceInstaller
//
this.MyServiceInstaller.ServiceName = "MyService";
//
// ProjectInstaller
//
this.Installers.AddRange(new System.Configuration.Install.Installer[] {
// *** Expected here: this.MyServiceInstaller,
this.MyServiceProcessInstaller});
}
private System.ServiceProcess.ServiceProcessInstaller MyServiceProcessInstaller;
private System.ServiceProcess.ServiceInstaller MyServiceInstaller;
}
}