Контекст
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)
Я не понимаю почему, потому что:
- Имя сервиса точно такое же, как в
ServiceInstaller
(в свойствеServiceName
) - Код выполняется внутри другой службы, которая запускается под учетной записью Локальная система.