c# - qfe - listar updates instalados windows
¿Cómo obtengo una lista de actualizaciones instaladas y revisiones? (5)
Una lista de todas las actualizaciones y revisiones que se han instalado en mi computadora, provenientes de Microsoft Windows Update o de la base de conocimientos. 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 QFE.
Lo necesito para trabajar en Windows XP, Vista y 7.
Después de una búsqueda más en lo que he encontrado antes. (Sí, lo mismo que VolkerK sugiere primero)
- Bajo VS2008 CMD en% SystemRoot% / System32 / ejecute un comando para obtener una dll administrada:
tlbimp.exe wuapi.dll /out=WUApiInterop.dll - Agregue WUApiInterop.dll como referencia del proyecto para que veamos las funciones.
Usando el siguiente código, puedo obtener una lista de la que puedo extraer los números de 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, a continuación le indicamos cómo hacerlo en Powershell:
- Abrir PowerShell (preferiblemente "ejecutar como administrador")
- Escribe "get-hotfix" y pulsa enter. Eso es.
Puede utilizar IUpdateSession3 :: QueryHistory Method .
Las propiedades de las entradas devueltas se describen en http://msdn.microsoft.com/en-us/library/aa386400(VS.85).aspx
Set updateSearch = CreateObject("Microsoft.Update.Session").CreateUpdateSearcher Set updateHistory = updateSearch.QueryHistory(1, updateSearch.GetTotalHistoryCount) For Each updateEntry in updateHistory Wscript.Echo "Title: " & updateEntry.Title Wscript.Echo "application ID: " & updateEntry.ClientApplicationID Wscript.Echo " --" Next
edición: también eche un vistazo a http://msdn.microsoft.com/en-us/library/aa387287%28VS.85%29.aspx
const string querys = "SELECT HotFixID FROM Win32_QuickFixEngineering";
var search = new ManagementObjectSearcher(querys);
var collection = search.Get();
foreach (ManagementObject quickfix in collection)
{
hotfix = quickfix["HotFixID"].ToString();
}
listBox1.Items.Add(hotfix);
Esto llenará el cuadro de lista con las revisiones o actualizaciones instaladas actualmente
Si desea enumerar todo el historial de actualizaciones y revisiones que se mostrarán, el ejemplo anterior de Tom Wijsman como se indica funcionará
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 utilizo para encontrar que KB está en el paquete de seguridad como Tom Wijsman mencionó y ejecutó.
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 como el que estás buscando, creo