2009-06-25 13 views

Répondre

4
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 
1

Essayez d'obtenir du Registre:

using Microsoft.Win32; 
. 
. 
. 

RegistryKey hklm = Registry.LocalMachine; 
hklm = hklm.OpenSubKey(@"System\CurrentControlSet\Services\SERVICE_NAME"); 

string servicePath = hklm.GetValue("ImagePath"); 
+0

La lecture du registre de formulaire nécessite un niveau d'exécution d'administrateur privilégié. N'est-ce pas? – mrtaikandi

+0

Bien que ce ne soit pas le moyen idéal pour obtenir cette information, je me suis rabattue sur ce sujet comme ci-dessus mais avec quelques modifications que je viens de faire. Nécessite des tests à savoir sur l'invite UAC, mais presque n'importe quel utilisateur peut interroger cette partie du registre sans entrave, je crois. – Saxar

8

est ici une solution possible en utilisant WMI:

using System.Management; 


String query = String.Format("SELECT PathName FROM Win32_Service WHERE Name = '{0}'", serviceName); 

using (ManagementObjectSearcher mos = new ManagementObjectSearcher(query)) { 
    foreach(ManagementObject mo in mos.Get()) 
     Console.WriteLine(mo["PathName"].ToString()); 
} 

Assurez-vous d'envelopper le ManagementObjectSearcher dans un using bloquer parce que c'est une ressource et doit être éliminé correctement.

Je ne suis pas sûr que cela nécessite des autorisations élevées pour s'exécuter, mais il nécessite l'installation et l'exécution de WMI sur la machine. Pour vérifier si WMI est en cours d'exécution, ouvrez le composant logiciel enfichable Services et recherchez Windows Management Instrumentation. Vous pouvez également l'activer en exécutant net start winmgmt à partir de la ligne de commande.

+0

Je reçois l'exception "Requête invalide" sur mos.Get() –

+1

@LostInLib Mes excuses ... J'avais oublié de joindre le nom du service entre guillemets simples. J'ai mis à jour ma réponse pour refléter ce changement. :) – Paccc

Questions connexes