Как я могу проверить, установлено ли конкретное исправление (обновление Windows) в моей системе? - PullRequest
5 голосов
/ 12 мая 2011

У меня есть некоторые проблемы с файлом Riched20.dll, который используется моим приложением, эта проблема исправлена ​​с помощью исправления KB884047 , чтобы избежать проблем со старыми версиями Windows, я хочу определить, когдаэто исправление применяется в системе, поэтому как я могу проверить, установлено ли конкретное исправление (обновление Windows) в моей системе с помощью delphi?

1 Ответ

9 голосов
/ 12 мая 2011

Некоторое время назад я писал в блоге на эту тему search for installed windows updates using Delphi, WMI and WUA

Ключ используется API агента обновления Windows

проверьте этот пример кода.

//use in this way ISHotFixID_Installed('KB982799')
function  ISHotFixID_Installed(const HotFixID : string): Boolean;
var
  updateSession      : OleVariant;
  updateSearcher     : OleVariant;
  updateEntry        : OleVariant;
  updateSearchResult : OleVariant;
  UpdateCollection   : OleVariant;
  oEnum              : IEnumvariant;
  iValue             : LongWord;
begin
 result:=False;
  updateSession:= CreateOleObject('Microsoft.Update.Session');
  updateSearcher    := updateSession.CreateUpdateSearcher;
  //this line improves the performance , the online porperty indicates whether the UpdateSearcher goes online to search for updates. so how we are looking for already installed updates we can set this value to false
  updateSearcher.online:=False;
  updateSearchResult:= updateSearcher.Search(Format('IsInstalled = 1 and Type=%s',[QuotedStr('Software')]));
  UpdateCollection  := updateSearchResult.Updates;
  oEnum         := IUnknown(UpdateCollection._NewEnum) as IEnumVariant;
  while oEnum.Next(1, updateEntry, iValue) = 0 do
  begin
    Result:=Pos(HotFixID,updateEntry.Title)>0;
    updateEntry:=Unassigned;
    if Result then break;
  end;

end;
...