Имя текущего сервиса, если тот же exe-файл был настроен как несколько сервисов - PullRequest
4 голосов
/ 22 апреля 2010

Есть ли способ получить имя службы из C #, с которой текущая служба была зарегистрирована при ее установке.

Например, я регистрирую один и тот же сервис дважды:

sc.exe create ServiceName1 binPath= D:\myservice.exe
sc.exe create ServiceName2 binPath= D:\myservice.exe

В моем сервисе я действительно хочу знать, являюсь ли я ServiceName1 или ServiceName2. Но, похоже, нет способа сделать это.

Я пытался позвонить ServiceBase.ServiceName до его установки, но он просто пуст.

Я пытался ServiceController.GetServices().Where(svc => svc.ServiceHandle.DangerousGetHandle() == myservice.ServiceHandle), но, похоже, он получил другой дескриптор, поэтому они не сравнимы.

Существует специальная программа под названием SRVANY.exe, которая, похоже, способна это сделать. Вопрос только в том, как это происходит.

1 Ответ

0 голосов
/ 19 мая 2010

Я думаю, вы обнаружите, что вам нужно указать свойство servicename самостоятельно ...

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.servicename(VS.80).aspx

... если вы не установили имя_службы, тогда оно будет нулевым, и я думаю, что sc.exe сначала идет по нему, а затем создает его на основе имени exe.

Также следует отметить, что sc.exe идентифицирует сервис по множеству свойств / методов "name" ...

http://support.microsoft.com/kb/251192

... Может быть, потому что вы указываете имя_службы в коде, которое оно генерирует каким-либо образом.

Надеюсь, что это поможет прояснить немного вашего замешательства, даже если оно не решит полностью проблему.

...