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);

Теперь при установке он указан как служба в управлении компьютером.

Другие вопросы по тегам