2010-04-22 7 views
4

Y at-il un moyen d'obtenir le nom du service de C# que le service actuel a été enregistré lors de son installation.Nom du service courant au cas où le même exe a été installé que plusieurs services

Par exemple, j'enregistrer le même service à deux reprises:

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

Dans mon service, je veux vraiment savoir si je suis ServiceName1 ou ServiceName2. Mais il semble qu'il n'y ait aucun moyen de le faire.

J'ai essayé d'appeler ServiceBase.ServiceName avant la mise, mais il est tout simplement vide.

J'ai essayé ServiceController.GetServices().Where(svc => svc.ServiceHandle.DangerousGetHandle() == myservice.ServiceHandle) mais il semble avoir une autre poignée, donc ils ne sont pas compareable.

Il existe un programme spécial appelé SRVANY.exe et qui semble être en mesure de le faire. La question est de savoir comment il le fait.

+0

Je peux le voir est une copie de http://stackoverflow.com/questions/1841790/how-can-a-windows-service-determine-its-servicename – Cine

Répondre

0

Je pense que vous trouverez vous devez spécifier la propriété servicename vous ...

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

... si vous avez pas réglé l'servicename alors il sera nul, et je pense sc.exe passe par ce premier puis génère un basé sur le nom d'exe.

également une autre chose à noter est que sc.exe identifie le service par beaucoup de propriétés/méthodes « name » ...

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

... Peut-être parce que vous spécifiez le serviename dans le code, il est en générer un en quelque sorte.

Hope this helps clarifier un peu de votre confusion même, il ne résout pas complètement le problème.

Questions connexes