Sto lavorando a un programma di installazione per uno dei prodotti della mia azienda. Il prodotto può essere installato più volte e ogni installazione rappresenta un servizio Windows separato. Quando gli utenti aggiornano o reinstallano il programma, vorrei cercare i servizi in esecuzione, trovare i servizi che appartengono al prodotto, e quindi trovare il file eseguibile e il suo percorso per quel servizio. Quindi utilizzare tali informazioni per trovare quale dei servizi l'utente desidera aggiornare/sostituire/installare/ecc. Nel mio esempio di codice qui sotto, vedo il nome del servizio, la descrizione, ecc., Ma non vedo il vero nome del file o percorso. Qualcuno potrebbe dirmi cosa mi manca? Grazie in anticipo!trovare l'effettivo eseguibile e il percorso associato a un servizio Windows utilizzando C#
Il codice che ho è il seguente:
ServiceController[] scServices;
scServices = ServiceController.GetServices();
foreach (ServiceController scTemp in scServices)
{
if (scTemp.ServiceName == "ExampleServiceName")
{
Console.WriteLine();
Console.WriteLine(" Service : {0}", scTemp.ServiceName);
Console.WriteLine(" Display name: {0}", scTemp.DisplayName);
ManagementObject wmiService;
wmiService = new ManagementObject("Win32_Service.Name='" + scTemp.ServiceName + "'");
wmiService.Get();
Console.WriteLine(" Start name: {0}", wmiService["StartName"]);
Console.WriteLine(" Description: {0}", wmiService["Description"]);
}
}
È possibile utilizzare WMI o il registro. Dai un'occhiata a [questa domanda] (http://stackoverflow.com/questions/2728578/how-to-get-phyiscal-path-of-windows-service-using-net). – Gene
Fantastico! Grazie Gene! Usando il mio esempio sopra e il link che hai postato sono riuscito a fare quanto segue: wmiService.GetPropertyValue ("PathName"). ToString() che ha restituito il percorso completo e il nome del file del programma che viene eseduto – Aaron