Служба не найдена после установки с помощью AssemblyInstaller

Контекст

Windows 2008, 64-разрядная версия.
У меня установлена ​​служба .NET, которая действует как установщик.

Фон

Я использую этот код (кредит: Марк Гравелл) для установки службы:

using (var inst = new AssemblyInstaller(typeof(MyNamespace.Program).Assembly, new string[] { })) {
    IDictionary state = new Hashtable();
    inst.UseNewContext = true;
    try {
    if (uninstall) {
        inst.Uninstall(state);
    } else {
        inst.Install(state);
        inst.Commit(state);
    }
    } catch {
    try {
        inst.Rollback(state);
    } catch { }
    throw;
    }
}

Проблема

Все работает нормально и без исключений, но сразу после этого я пытаюсь запустить следующий код, чтобы запустить только что установленную службу:

using (var sc = new ServiceController("the service's name"))
{
    sc.Start();
    sc.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(20));
}

И я получаю исключение:

System.InvalidOperationException: Service [service name goes here] was not found on computer '.'. ---> System.ComponentModel.Win32Exception: The specified service does not exist as an installed service
   --- End of inner exception stack trace ---
   at System.ServiceProcess.ServiceController.GenerateNames()
   at System.ServiceProcess.ServiceController.get_ServiceName()
   at System.ServiceProcess.ServiceController.Start(String[] args)
   at System.ServiceProcess.ServiceController.Start()
   at ... (my code details)

Я не понимаю почему, потому что:

  1. Имя сервиса точно такое же, как в ServiceInstaller (в свойстве ServiceName)
  2. Код выполняется внутри другой службы, которая запускается под учетной записью Локальная система.

person Ron Klein    schedule 13.09.2012    source источник
comment
Вы когда-нибудь получали ответ на это?   -  person TCopple    schedule 01.07.2013
comment
@TCopple, внутри stackoverflow - явно нет. Снаружи - может быть, не помню. Но я так не думаю, иначе я бы ответил сам себе здесь.   -  person Ron Klein    schedule 01.07.2013


Ответы (2)


Возможно, служба застряла в состоянии ожидания и еще не завершила полную регистрацию, поэтому ее нельзя распознать как установленную службу.
Когда вы устанавливаете свойство UseNewContext, файл журнала установки ("{ Имя сборки}.InstallLog") содержит какую-либо значимую информацию?
Кроме того, чтобы убедиться, что это проблема с разрешениями, вы можете попробовать проверить существование службы, используя

sc query <ServiceName>

из административного командного окна?

person rkellerm    schedule 02.10.2014

Существует журнал установки, который может помочь. Найдите файл YouServiceName.InstallLog в папке службы.

Добавления установщика для службы может быть достаточно (это было для меня). Вам следует:

  • Откройте файл Service.cs в дизайнере,
  • Щелкните правой кнопкой мыши и
  • Выберите пункт меню «Добавить установщик».

Он не будет установлен прямо из коробки... вам нужно сначала создать класс установщика.

Для справки см. также этот вопрос.

person mvbattan    schedule 15.07.2016