¿Cómo obtengo una lista de actualizaciones y revisiones instaladas?

Una lista de cada actualización y revisión que se haya instalado en mi computadora, proveniente de Microsoft Windows Update o de la base de conocimiento. Necesito el ID de cada uno en forma de KBxxxxxx o alguna representación similar …

Actualmente tengo:

const string query = "SELECT HotFixID FROM Win32_QuickFixEngineering"; var search = new ManagementObjectSearcher(query); var collection = search.Get(); foreach (ManagementObject quickFix in collection) Console.WriteLine(quickFix["HotFixID"].ToString()); 

Pero esto no parece enumerar todo, solo enumera los QFE.

Necesito que funcione en Windows XP, Vista y 7.

Puede usar el método IUpdateSession3 :: QueryHistory .
Las propiedades de las entradas devueltas se describen en http://msdn.microsoft.com/en-us/library/aa386400(VS.85).aspx

  Establezca updateSearch = CreateObject ("Microsoft.Update.Session"). CreateUpdateSearcher
 Establecer updateHistory = updateSearch.QueryHistory (1, updateSearch.GetTotalHistoryCount)

 Para cada actualizaciónEntry in updateHistory
   Wscript.Echo "Título:" y updateEntry.Title
   Wscript.Echo "ID de aplicación:" & updateEntry.ClientApplicationID
   Wscript.Echo "-"
 Siguiente 

editar: también echa un vistazo a http://msdn.microsoft.com/en-us/library/aa387287%28VS.85%29.aspx

Después de buscar más en lo que he encontrado antes. (Sí, lo mismo que sugiere VolkerK primero)

  1. En VS2008 CMD en% SystemRoot% \ System32 \ ejecute un comando para obtener un dll administrado:
    tlbimp.exe wuapi.dll /out=WUApiInterop.dll
  2. Agregue WUApiInterop.dll como referencia de proyecto para que podamos ver las funciones.

Usando el siguiente código puedo obtener una lista desde la cual puedo extraer los números KB:

 var updateSession = new UpdateSession(); var updateSearcher = updateSession.CreateUpdateSearcher(); var count = updateSearcher.GetTotalHistoryCount(); var history = updateSearcher.QueryHistory(0, count); for (int i = 0; i < count; ++i) Console.WriteLine(history[i].Title); 

En caso de que solo desee la lista de actualizaciones y no le importe si la obtiene a través de un código o una GUI, aquí le mostramos cómo hacerlo en Powershell:

  1. Abre PowerShell (preferiblemente “ejecuta como administrador”)
  2. Escriba “get-hotfix” y presione enter. Eso es.

Obtener hotfixes

  string ExtractString(string s) { // You should check for errors in real-world code, omitted for brevity try { var startTag = "("; int startIndex = s.IndexOf(startTag) + startTag.Length; int endIndex = s.IndexOf(")", startIndex); return s.Substring(startIndex, endIndex - startIndex); } catch { return ("CNVFL"); } } 

Arriba hay un método simple de extracción de cadenas que uso para encontrar que KB está en el paquete de seguridad como Tom Wijsman había mencionado y ejecutaba el suyo.

 var updateSession = new UpdateSession(); var updateSearcher = updateSession.CreateUpdateSearcher(); var count = updateSearcher.GetTotalHistoryCount(); var history = updateSearcher.QueryHistory(0, count); for (int i = 0; i < count; ++i){ //sets KB here!! string _splitstring = ExtractString(history[i].Title); Console.WriteLine(_splitstring); } 

esto te daría el número de KB que estás buscando, creo