Подтвердить что ты не робот

Как получить список установленных обновлений и исправлений?

Список всех обновлений и исправлений, которые были установлены на моем компьютере, либо из Microsoft Windows Update, либо из базы знаний. Мне нужен идентификатор каждого в виде 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.

4b9b3361

Ответ 1

Вы можете использовать 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

Ответ 2

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

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

Используя следующий код, я могу получить список, из которого я могу извлечь номера 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);

Ответ 3

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

  • Откройте PowerShell (желательно "запустите как admin" )
  • Введите "get-hotfix" и нажмите enter. Это он.

Get hotfixes

Ответ 4

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

это даст вам номер KB, который вы ищете, я верю