Откуда программы "Установка и удаление программ" извлекают данные для столбца "Установлено"?

Я работаю над репликацией апплета Windows 7/8 add remove Programs с VBScript. Я получил в сценарий все правильные записи, но не смог включить в него всю правильную дополнительную информацию, отображаемую Windows.

Например: Windows отображает столбец "Установлено вкл." С датой. В некоторых случаях он получает их из соответствующих разделов реестра, таких как:

HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\InstallDate
HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\InstallDate
HKUS\USER - SID\Software\Microsoft\Windows\CurrentVersion\Uninstall\InstallDate

Очень немногие ключи на самом деле имеют значение InstallDate, и Windows всегда заполняет этот столбец. Мне удалось получить большинство пропущенных дат из WMI:

 ("SELECT * FROM Win32_Product Where Description = " & "'" & strName & "'" & "")
for each objSoftware in colSoftware
Date = objSoftware.InstallDate

Это только дает даты от установленных приложений MSI.

Я подумал, может быть, Windows "угадал" даты, основанные на датах файла Program Files/ProgramData, но я попытался изменить их вручную, и это не отражается в "Добавить / удалить". Я пытаюсь выяснить, как Windows тянет эту дату. Я заметил, что CCleaner может воспроизводить добавить / удалить без ошибок, поэтому эта информация доступна где-то. Я просто исчерпал себя, ища это.

1 ответ

Решение

После долгих раздумий я определил, что программы установки и удаления Windows получают дату "Установлено", по крайней мере, из трех возможных мест:

  • Для приложений, установленных MSI, он получает дату от WIN32_Product (безусловно, самый распространенный способ)

  • Для приложений, не относящихся к MSI, он ищет значение InstallDate в соответствующем ключе удаления реестра (пример: HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome)

  • Для приложений не от MSI, у которых нет InstallDate, Windows ищет последнюю дату, когда ключ Uninstall был записан, и использует эту дату для "Установлено включено".

Это был последний метод, который так долго ставил меня в тупик. Это означает, что каждый раз, когда не-MSI программа, у которой отсутствует значение InstallDate, обновляется, а номер версии в ключе деинсталляции изменяется, вы заметите, что дата "Установлено вкл." Также обновляется и создает видимость этой программы. только что был установлен.

Пример: HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ Плагин Adobe Flash Player

Если ваша установка Flash Player Plugin не была основана на MSI, вы можете перейти к этому ключу и изменить версию с 11.8.800.94 до 11.8.800.93, и ваша установка / удаление изменит дату "Установить на" до сегодняшнего дня.

Другие вопросы по тегам