2010-08-19 9 views
7

Comment puis-je interroger pour une précise et liste localisée des mises à jour de Windows installé sur une machine utilisant C#?requête pour la liste précise et localisée des mises à jour Windows installés

Je définis précise comme correspondant à ce qui est affiché dans la catégorie de vue de Microsoft boîte de dialogue Mises à jour installées « Microsoft Windows » sous Programmes et fonctionnalités dans Windows 7.

Si je WUAPI.DLL, l'information est retourné localisé mais je ne peux pas obtenir une liste précise. Dans le cas de WUAPI.DLL, certains correctifs sont manquants et si une mise à jour a été désinstallée, il apparaît toujours dans la liste générée par le code suivant:

public static void GetWindowsUpdates() 
{ 
    var updateSession = new UpdateSession(); 
    var updateSearcher = updateSession.CreateUpdateSearcher(); 
    var count = updateSearcher.GetTotalHistoryCount(); 
    if (count == 0) 
     return; 

    var history = updateSearcher.QueryHistory(0, count); 
    for (int i = 0; i < count; i++) 
    { 
     if (history[i].ResultCode == OperationResultCode.orcSucceeded) 
     { 
      Console.WriteLine(history[i].Title); 

      if (history[i].Operation == UpdateOperation.uoUninstallation) 
      { 
       Console.WriteLine("!!! Operation == uninstall"); // This is never true 
      } 
     } 
    } 
} 

La méthode de recherche Wuapi n'a pas non plus fournir une liste précise en utilisant le code suivant:

 WUApiLib.UpdateSessionClass session = new WUApiLib.UpdateSessionClass(); 
     WUApiLib.IUpdateSearcher searcher = session.CreateUpdateSearcher(); 

     searcher.IncludePotentiallySupersededUpdates = true; 

     WUApiLib.ISearchResult result = searcher.Search("IsInstalled=1"); 
     Console.WriteLine("Updates found: " + result.Updates.Count); 
     foreach (IUpdate item in result.Updates) 
     { 
      Console.WriteLine(item.Title); 
     } 

Si j'utilise WMI pour lire la liste des mises à jour, je peux obtenir une liste précise, mais il est pas localisé. J'utilise le code suivant:

ManagementObjectSearcher searcher = new ManagementObjectSearcher(new ObjectQuery("select * from Win32_QuickFixEngineering")); 
searcher.Options.UseAmendedQualifiers = true; 
searcher.Scope.Options.Locale = "MS_" + CultureInfo.CurrentCulture.LCID.ToString("X"); 
ManagementObjectCollection results = searcher.Get(); 

Console.WriteLine("\n==WMI==" + results.Count); 
foreach (ManagementObject item in results) 
{ 
    Console.WriteLine("\t--Properties--"); 
    foreach (var x in item.Properties) 
    { 
     Console.WriteLine(x.Name + ": " + item[x.Name]); 
    } 
    Console.WriteLine("\t--System Properties--"); 
    foreach (var x in item.SystemProperties) 
    { 
     Console.WriteLine(x.Name + ": " + x.Value); 
    } 
    Console.WriteLine("\t--Qualifiers--"); 
    foreach (var x in item.Qualifiers) 
    { 
     Console.WriteLine(x.Name + ": " + x.Value); 
    } 
} 

Répondre

4

Le Wuapi enregistre uniquement les actions réalisées par le Wuapi, donc si vous installez ou supprimer manuellement une mise à jour, il sera soit rester dans la liste après avoir été désinstallés ou jamais apparaître dans la liste. En conséquence, à mon avis, WUApi ne peut pas compter sur une liste précise. WMI permet d'accéder à une liste précise des mises à jour Windows, mais la liste est filtrée uniquement dans la catégorie "Microsoft Windows". C'était difficile, parce que mon exigence était d'obtenir une liste de toutes les mises à jour.

En interne, la boîte de dialogue "Afficher les mises à jour installées" utilise le service CBS (Component Based Service). Malheureusement, CBS n'est pas publique. Certains détails concernant l'API peuvent être trouvés ici: http://msdn.microsoft.com/en-us/library/Aa903048.aspx

+0

Nous sommes confrontés aux mêmes problèmes tout en essayant d'obtenir toutes les mises à jour. Comment avez-vous résolu ce problème? Pouvez-vous s'il vous plaît partager le code si possible? –

+2

Existe-t-il une documentation sur msdn à propos de "Le WUApi enregistre uniquement les actions effectuées via le WUApi"? –