Obtener las aplicaciones instaladas en Windows con C#
En ocasiones resulta muy útil saber qué aplicaciones tenemos instaladas en el ordenador bien porque deseamos ver incompabilidades o crear un log extenso en caso de error o simplemente porque deseemos crear un inventario de éstas.
Podemos saber las aplicaciones instaladas en un ordenador de dos formas: utilizando el registro o WMI (Windows Management Instrumentation).
En este artículo utilizaremos WMI simplemente por perderle el miedo a esta tecnología y porque (para mi gusto) resulta bastante más sencillo.
WMI es una tecnología de Microsoft que lleva presente en nuestras máquinas practicamente desde Windows 2000 y ofrece un API sencillo de acceso prácticamente a cualquier información de sistema a partir de consultas similares al SQL o mediante enumerados.
Para acceder a información de WMI desde nuestra aplicación.NET debemos utilizar el espacio de nombres System.Management
que ofrece cuatro clases:
ManagementObject
oManagementClass
: que presenta un objeto o clase de administración.ManagementObjectSearcher
: que permite consultar una colección deManagementObject
oManagementClass
a partir de una consulta SQL o un enumerado.ManagementEventWatcher
: que se utilizapara suscribirse a notificaciones de eventos de WMI.ManagementQuery
: utilizado como base para todas las clases de consulta.
En nuestro caso, para obtener la información sobre las aplicaciones instaladas en nuestro equipo debemos utilizar la clase Win32_Product que presenta información sobre los productos instalados utilizando el Windows Installer.
La función es tan simple como realizar la consulta en SQL y recorrer la colección devuelta mostrando el nombre en la consola:
private void ShowInstalledApplications()
{
ManagementObjectSearcher objColProducts = new ManagementObjectSearcher("SELECT * FROM Win32_Product");
// Recorremos los elementos obtenidos mostrándolos en la consola
foreach (ManagementObject objProduct in objColProducts.Get())
Console.WriteLine(objProduct["Name"]);
}
Si desea más información sobre cómo utilizar WMI desde el Framework de.NET nada mejor que este artículo en la MSDN.