Как получить список установленных обновлений и исправлений? - PullRequest
17 голосов
/ 02 мая 2009

Список всех обновлений и исправлений, установленных на моем компьютере, поступающих либо из Центра обновления Windows, либо из базы знаний. Мне нужен идентификатор каждого в форме KBxxxxxx или какого-то подобного представления ...

В настоящее время у меня есть:

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());

Но, похоже, здесь не все перечислено, а только списки QFE.

Мне нужно, чтобы он работал на Windows XP, Vista и 7.

Ответы [ 5 ]

12 голосов
/ 03 мая 2009

После дальнейших поисков того, что я нашел ранее. (Да, так же, как VolkerK предлагает в первую очередь)

  1. Под VS2008 CMD в% SystemRoot% \ System32 \ выполните команду для получения управляемого dll:
    tlbimp.exe wuapi.dll /out=WUApiInterop.dll
  2. Добавьте WUApiInterop.dll в качестве ссылки на проект, чтобы мы увидели функции.

Используя следующий код, я могу получить список, из которого я могу извлечь числа в КБ:

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);
7 голосов
/ 02 мая 2009

Вы можете использовать IUpdateSession3 :: QueryHistory Method .
Свойства возвращенных записей описаны в 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

edit: также посмотрите на http://msdn.microsoft.com/en-us/library/aa387287%28VS.85%29.aspx

0 голосов
/ 31 октября 2018
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);

Это заполнит список с установленными в данный момент исправлениями или обновлениями

Если вы хотите отобразить всю историю обновлений и исправлений для отображения тогда приведенный выше пример Tom Wijsman как заявлено будет работать

0 голосов
/ 30 сентября 2017
        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");
        }
    }

Выше приведен простой метод извлечения строки, который я использую, чтобы обнаружить, что 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){
   //sets KB here!!
   string _splitstring = ExtractString(history[i].Title);
   Console.WriteLine(_splitstring);
}

это даст вам номер КБ, как вы ищете, я считаю

0 голосов
/ 19 ноября 2014

На случай, если вам нужен только список обновлений, и вам все равно, получите ли вы его с помощью кода или графического интерфейса, вот как это сделать в Powershell:

  1. Открыть PowerShell (предпочтительно «запуск от имени администратора»)
  2. Введите "get-hotfix" и нажмите ввод. Вот и все.

Get hotfixes

...