C# - установщик службы Windows не регистрирует службу
Я пытаюсь использовать установщик для службы Windows, и хотел бы избежать использования InstallUtil.exe. Установщик работает правильно (исполняемый файл и dll находятся в правильном каталоге), но служба не отображается в разделе "Управление компьютером".
Вот что я сделал до сих пор:
Имя класса обслуживания по умолчанию - Service1.
В установщике проекта ServiceName установщика службы совпадает с именем класса - Service1.
В разделе "Пользовательские действия" основной вывод службы был добавлен в "Установка", "Фиксация", "Откат" и "Удаление".
Я использую http://support.microsoft.com/kb/816169 в качестве ссылки.
Есть идеи?
3 ответа
Есть ли в вашем сервисном проекте класс установщика? У вас должен быть тот, который выглядит примерно так:
[RunInstaller(true)]
public partial class Service1Installer : Installer
{
public Service1Installer()
{
InitializeComponent();
ServiceProcessInstaller process = new ServiceProcessInstaller();
process.Account = ServiceAccount.LocalSystem;
ServiceInstaller serviceAdmin = new ServiceInstaller();
serviceAdmin.StartType = ServiceStartMode.Manual;
serviceAdmin.ServiceName = "Service1";
serviceAdmin.DisplayName = "Service1";
serviceAdmin.Description = "Service1";
Installers.Add(serviceAdmin);
}
}
Убедитесь, что вы создали классы ServiceInstaller и ServiceProcessInstaller в своем сервисном проекте. (Проверьте эту ссылку для получения дополнительной информации).
Закройте управление компьютером и окно "Службы", снова запустите программу установки и снова откройте окно "Службы".
Если это не сработает, перезагрузите компьютер. Возможно, некоторые файлы заблокированы.
Само собой разумеется, что для правильной работы вам, вероятно, нужны административные привилегии на компьютере.
Я думаю, что я понял это. Это может быть ошибка в коде Designer, или я пропустил шаг.
Я думаю, что в коде дизайнера, в методе InitializeComponent(), он должен добавить:
this.Installers.AddRange(new System.Configuration.Install.Installer[] {this.serviceProcessInstaller1, this.serviceInstaller1});
Его там не было, поэтому я добавил это в конструктор ProjectInstaller:
Installers.Add(serviceInstaller1);
Installers.Add(serviceProcessInstaller1);
Теперь при установке он указан как служба в управлении компьютером.