Определение того, установлена ​​ли уже служба - PullRequest
5 голосов
/ 12 сентября 2011

Как часть установки моей службы Windows, я прописал альтернативу installutil и командной строке:

IDictionary state = new Hashtable();
using (AssemblyInstaller inst = new AssemblyInstaller(typeof(MyServiceClass).Assembly, args))
{
    IDictionary state = new Hashtable();
    inst.UseNewContext = true;
    //# Service Account Information
    inst.Install(state);
    inst.Commit(state);
}

, чтобы установить его.Я определяю, нужно ли это делать, определяя, запускается ли он успешно.Я ожидаю задержки между запросом его запуска и установкой флага RunningOk, и это скорее общее, программное решение.Решение ( Как программно установить службу Windows в C #? ) http://dl.dropbox.com/u/152585/ServiceInstaller.cs уже почти 3 года, и оно импортирует библиотеки DLL, которые, как я знаю из .NET, побеждают егонамерения по обеспечению безопасности.

Поэтому я хотел бы знать более краткий способ сделать это с .NET, если таковой существует?

Ответы [ 2 ]

11 голосов
/ 12 сентября 2011

Чтобы найти службу и работает ли она,

    private static bool IsServiceInstalled(string serviceName)
    {
        ServiceController[] services = ServiceController.GetServices();
        foreach (ServiceController service in services)
            if (service.ServiceName == serviceName) return true;
        return false;
    }

    private static bool IsServiceInstalledAndRunning(string serviceName)
    {
        ServiceController[] services = ServiceController.GetServices();
        foreach (ServiceController service in services)
            if (service.ServiceName == serviceName) return service.Status != ServiceControllerStatus.Stopped;
        return false;
    }

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

Приятно делать это в кратких конструкциях .NET.Не помню, откуда я взял информацию, но теперь это выглядит так просто и стоит того.

3 голосов
/ 12 сентября 2011

Я рекомендую использовать встроенную поддержку установщика Windows .

Вы можете управлять установкой, удалением и запуском или остановкой службы.

К сожалению, не все средства разработки настроек предоставляют прямую поддержку для этого, поэтому вам нужно будет найти тот, который делает.

...