Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: systeminfo список установленных обновлений  (Прочитано 20246 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 04-10-2018 06:27 » 

подскажите, где виндовая команда systeminfo берёт список установленных обновлений? Вот пример вывода

...
...
Исправление(я):                   Число установленных исправлений - 552.
                                  [01]: KB2764913
                                  [02]: KB2764913
                                  [03]: KB2764916
                                  [04]: KB2764916
                                  [05]: KB2718695
                                  [06]: KB2718695
...
...

рыл интернет, вроде нашёл совет смотреть ветку реестра

Цитата
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\
«SID»\Products\
«номер программы»\Patches\
«номер обновления для нее»

Сделал сбор инфы оттуда, на компе проверил - вроде ок. Но в виртуалке нифига не ок, ветка практически пустая, хоть обновления есть, и systeminfo их показывает


(основной вопрос)
так откуда этот список берётся ?


на вопрос "почему бы не использовать эту утилиту": пробовал systeminfo, пробовал wmic qfe | find "kbxxxxxxx" но они работают ооооочень долго , просто некрасиво долго

Добавлено через 2 минуты и 51 секунду:
кстати, изначально задача выглядит так:
-проверить, требуется ли в системе обновление KBxxxxxxx,
- установлено ли оно уже,
- а если нужно - ставим

Может, есть какой-то стандартный не геморройный способ такую задачу выполнить ?
« Последнее редактирование: 04-10-2018 06:30 от Алексей1153 » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 04-10-2018 06:36 » 

может, у кого завалялись случайно исходники systeminfo  Отлично
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 04-10-2018 11:12 » 

Лёш, если ты знаешь апгрейд-GIUD этого самого KBxxxxxxx, то можно воспользоваться ф-ей MsiEnumRelatedProducts.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 04-10-2018 11:27 » 

Джон, спасибо, гляну
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 04-10-2018 11:53 » 

Вот тут вроде предлагают решение.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 04-10-2018 12:51 » 

Джон, попробовал - не всё компилятор может найти в  моей старенькой студии 2008 Краснею Например, SHGetKnownFolderItem в моих заголовках нету, енум KNOWN_FOLDER_FLAG тоже


Текущий вариант у меня такой - шуршу по ветке реестра
Цитата
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\

там ищу в именах ключей и строковых значениях строку "KBxxxxxxx". На полный  перебор уходит максимум 6 секунд на моём компе, это уже приемлимо, это не 2-5 минут, как с wmic и systeminfo

Важно использовать 32-битную версию для 32-битных ОС (и 64 для 64) , иначе поиск происходит по другой ветке (для 32 - ответвление Wow6432Node), а там содержимое не то, что ожидается
Записан

HandKot
Молодой специалист

ru
Offline Offline

« Ответ #6 : 05-10-2018 04:45 » 

посмотрите How do I get a list of installed updates and hotfixes?
Записан

I Have Nine Lives You Have One Only
THINK!
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 05-10-2018 06:00 » 

HandKot, спасибо, кое-что проясняется. Попозже отпишусь про результат )

Добавлено через 1 час, 58 минут и 22 секунды:
HandKot, не совсем понятен один момент. Использую такую цепь поиска

Код:
searcher->GetTotalHistoryCount(&count)

IUpdateHistoryEntryCollection* Collection
searcher->QueryHistory(0,count,&Collection)

for(LONG inx=0;inx<count;inx++)
{
IUpdateHistoryEntry* Entry
Collection->get_Item(inx,&Entry)

Entry->get_Title(&Title);// Gets the title of an update.
...

в элементе IUpdateHistoryEntry нужно что-то такое, навроде имени обновления, но из более подходящего имеются get_Title,get_Description . В них не всегда есть строка "KBxxxxxxx", а иногда и вообще кириллицей "КБxxxxxxx" .

Также ещё можно продолжить так

Код:
	IUpdateIdentity* Identity
Entry->get_UpdateIdentity(&Identity)
Identity->get_UpdateID - возвращает GUID
я так понимаю, это и есть тот гуид, про который говорил Джон. Осталось только понять, где он берётся

« Последнее редактирование: 05-10-2018 07:58 от Алексей1153 » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 05-10-2018 08:22 » new

отсюда пробовал вариант (по внешнему виду как раз то, что нужно)
http://www.cplusplus.com/forum/windows/82125/

но строка
Код:
hr = searcher->Search(criteria, &results); 

выполняется чудовищно долго
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines