Estoy trabajando en un programa de instalación para uno de los productos de mi compañía. El producto se puede instalar varias veces y cada instalación representa un servicio de Windows por separado. Cuando los usuarios actualicen o reinstalen el programa, me gustaría buscar los servicios en ejecución, encontrar los servicios que pertenecen al producto y luego encontrar el archivo ejecutable y su ruta para ese servicio. Luego use esa información para encontrar cuál de los servicios desea actualizar/reemplazar/instalar/etc. En el siguiente ejemplo de código, veo el nombre del servicio, la descripción, etc., pero no veo el nombre de archivo o la ruta real. ¿Podría alguien decirme qué me estoy perdiendo? ¡Gracias de antemano!encontrar el ejecutable real y la ruta asociada a un servicio de Windows usando C#
El código que tengo es el siguiente:
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"]);
}
}
Puede usar WMI o el registro. Eche un vistazo a [esta pregunta] (http://stackoverflow.com/questions/2728578/how-to-get-phyiscal-path-of-windows-service-using-net). – Gene
¡Impresionante! ¡Gracias Gene! Utilizando mi ejemplo anterior y el enlace que publicó, pude hacer lo siguiente: wmiService.GetPropertyValue ("PathName"). ToString() que devolvió la ruta completa y el nombre de archivo del programa que se está exedutando – Aaron