Me temo que no hay otra manera que obtener la ruta del archivo ejecutable desde el registro ya que ServiceController
no proporciona esa información.
Aquí es una muestra que había creado antes:
private static string GetExecutablePathForService(string serviceName, RegistryView registryView, bool throwErrorIfNonExisting)
{
string registryPath = @"SYSTEM\CurrentControlSet\Services\" + serviceName;
RegistryKey key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView).OpenSubKey(registryPath);
if(key==null)
{
if (throwErrorIfNonExisting)
throw new ArgumentException("Non-existent service: " + serviceName, "serviceName");
else
return null;
}
string value = key.GetValue("ImagePath").ToString();
key.Close();
if(value.StartsWith("\""))
{
value = Regex.Match(value, "\"([^\"]+)\"").Groups[1].Value;
}
return Environment.ExpandEnvironmentVariables(value);
}
Después de conseguir el camino exe, sólo tiene que utilizar FileVersionInfo.GetVersionInfo(exePath)
clase para obtener la versión.
¿Ha comprobado esto ... http: //stackoverflow.com/questions/1357268/programmatically-retrieving-assembly-version-of-a-running-service –
@ Aaron - gracias, ese es un buen lugar para comenzar ! :) –