views:

71

answers:

1

Is there a way to get the service name from C# that the current service was registered with when it was installed.

For instance, I register the same service twice:

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

In my service, I actually want to know if I am ServiceName1 or ServiceName2. But there seem to be no way to do that.

I tried calling ServiceBase.ServiceName prior to setting it, but it is just empty.

I tried ServiceController.GetServices().Where(svc => svc.ServiceHandle.DangerousGetHandle() == myservice.ServiceHandle) but it seems to get another handle, so they are not compareable.

There is a special program called SRVANY.exe and that seems to be able to do it. The question is just how it does so.

A: 

I think you'll find you need to specify the servicename property yourself ...

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

... if you haven't set the servicename then it will be null, and I think sc.exe goes by that first then generates one based on the exe name.

Also another thing to note is that sc.exe identifies service through lots of "name" properties / methods ...

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

... Maybe because you are specifying the serviename in code it's generating one somehow.

Hope this helps clarify a bit of your confusion even it don't completely resolve the issue.

Wardy