Как я могу запросить для точной и локализованного списка обновлений Windows, установленного на компьютер с помощью C#?запросов для точного и локализованного списка установленных обновлений для Windows
Я определяю точный в соответствие то, что отображается в категории «Microsoft Windows» ЗРЕНИЯ установлен диалог от Microsoft Updates под Программы и компоненты в Windows, 7.
Если я использую WUApi.DLL, информация вернулся локализован, но я не могу получить точный список. В случае WUApi.dll, некоторые исправления отсутствуют, и если обновление было удалено, он по-прежнему отображается в списке сгенерирован следующий код:
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
}
}
}
}
Метод поиск WUApi также не обеспечивает точный список, используя следующий код:
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);
}
Если я использую WMI, чтобы прочитать список обновлений, я могу получить точный список, но он не локализован. Я использую следующий код:
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);
}
}
Мы сталкиваемся с теми же проблемами при попытке получить все обновления. Как вы решили эту проблему. Не могли бы вы поделиться, если это возможно, кодом? –
Есть ли какая-либо документация по msdn о «Только WUApi регистрирует действия, выполненные через WUApi»? –