Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > поиск информации для Uninstall


Автор: MFSham 6.11.2005, 20:28
Если открыть стандартный windows-ий uninstaller, то напротив проги стоит дополнительная инфа как размер, дата последнего запуска и частота использования. Вот мне и надо где-то найти всю эту инфу.
Что я знаю,что в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\ARPCache хранится нужная инфа в ключе SlowInfoCache о некоторых программах. А между тем стандартный uninstall находит инфу практически ко всем прогам. Вот мне надо и узнать откуда он выковыривает эту инфу.
В MSDN нашел такую структуру как SLOWAPPINFO, которая собственно и представляет собой SlowInfoCache. В замечаниях этой структуры говорится, что эта структура использует интерфейсы : GetSlowAppInfo и GetCachedSlowAppInfo. Как это все взаимодействует, мне так выяснить и не удалось.
Может кто что-нибудь знает где найти хоть какую дополнительную инфу?

Автор: Girder 8.11.2005, 13:49
Тебе в принципе достаточно два ключика смотреть:
1.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
2.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\ARPCache\

Ну если с первым там все понятно... то вот со вторым там есть в каждой позиции SlowInfoCache
Формат его такой:
1. по 8 - ХЗ smile
2. c 8 по 15(включительно) байты - енто размер в байтах
3. c 16 по 23(включительно) байты - енто TFileTime (первые 4 байта енто Low, старшие енто High) - типо когда последний раз использывался
4. с 24 по 27(включительно) байты - енто типо сколько раз использывался(но точно не уверен smile )
=0 - редко
<=12 - иногда
>12 - часто

Автор: MFSham 8.11.2005, 23:53
Цитата(Girder @ 8.11.2005, 13:49)
... то вот со вторым там есть в каждой позиции SlowInfoCache

Про SlowInfoCache я уже на форуме спрашивал. Научился оттуда выдирать все данные, которые теперь собственно и использую.
Вод собственно что он из себя представляет :
Код

 TSlowInfoCache = record
      Size              : DWord;
      HasName      : LongBool;
      InstallSize     : int64;
      LastUsed      : TFileTime;
      Frequency     : Integer;
      Name            : array [0..261] of wideChar;
  end;

Girder где ты нашел число 12, которое является разграничителем частоты использования между редко и часто. Я планировал это число сделать 10.

Автор: Girder 9.11.2005, 00:04
Посмотрел у себя в реестре и сравнил с uninstaller-ом smile

Автор: MFSham 9.11.2005, 01:12
Ну это уже выше моего понимания!
Короче проделал следующий эксперимент :
Удалил из ARPCache папку с названием проги в которое естественно содержится
SlowInfoCache. Запустил стандартный uninstall. И, о чудо, удаленная инфа
нашлась. Проделал тот же эксперимент, но при этом запуслил RegMon. Проследил,
куда он лазил для поиска инфы. Оказалось, что никуда. А в графе считывания
инфы из SlowInfoCache стояло NOTFOUND. Ну понимаю размер можно как-либо подогнать,
но дату последнего использования и частоту откуда взять??? Я уже весь регистр
перечесал вдоль и поперек, но нифига не нашел. Между тем после того как
запустить стандартный uninstall можно смело лезть в регистр и смотреть на вновь
появишуюся удаленную папку, в которой содержится удаленный SlowInfocache.
Из RegMon'a нашел, что доп. инфа для прог без SlowInfoCache еще берется из
HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\{набор цифр}\InstallProperties\

Может кто знает, что за фокусы делает стандартный uninstall?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)