2009-08-31 12 views
8

Me gustaría acceder a la información de la versión del ensamblado de un servicio que "controlo" con la clase ServiceController. (es decir, me gustaría mostrar "2.3.1.23"), sin embargo, no puedo encontrar ninguna información sobre cómo recuperar las versiones de ensamblaje ... ¿Es posible?Recuperación mediante programación de la versión de ensamblaje de un servicio en ejecución

EDIT: Solo para aclarar ... Solo sé el nombre del servicio que se ejecuta en la computadora local. Quiero acceder a "FileVersionInfo" de ese servicio (mejor dicho, exe de servicio), sin embargo, no sé dónde se encuentra ese servicio exe.

Respuesta

10

Si he entendido bien, que desea obtener la versión de cualquier exe servicio. Suponiendo que se conoce el nombre y la ruta del ejecutable del servicio, es posible que desee probar:

FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(<path and name of service exe>); 

A continuación, puede utilizar las propiedades de la clase FileVersionInfo para mostrar el número de versión. Tenga en cuenta que esto también funciona para rutas UNC siempre que tenga permisos para acceder a la lectura del archivo.

EDITAR
para obtener la ruta y el nombre del archivo ejecutable si sólo sabe el nombre del servicio, se puede acceder al Registro bajo HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. Busque una clave que coincida con el nombre del servicio. Debajo de esa clave, hay un nombre de valor ImagePath que contiene el nombre y la ruta del ejecutable.

+0

Sí entendió correctamente, y esto funcionaría, sin embargo, no sé dónde se encuentra el servicio exe ... Solo sé el nombre que se pasa al constructor de la clase ServiceController. –

+0

Edité mi respuesta para mostrarle cómo obtener el ejecutable para el servicio. –

+0

+1 ¡Gracias, eso también me ayudó! –

3

Prueba esto:

System.Reflection.Assembly.GetAssembly(typeof(ServiceController)).GetName().Version 
+3

Creo que el OP no quiere ver la versión del ensamblado .NET que implementa la clase ServiceController, pero la información de la versión de algún archivo exe ... –

0
Assembly runningAssembly = Assembly.GetEntryAssembly(); 
if (runningAssembly == null) 
{ 
    runningAssembly = Assembly.GetExecutingAssembly(); 
} 
runningAssembly.GetName().Version; 

Use este código dentro de su servicio.

+0

Lo siento, pensé que querías obtener la versión de ensamblado del código dentro del servicio en ejecución. – softveda

Cuestiones relacionadas