Откуда программы "Установка и удаление программ" извлекают данные для столбца "Установлено"?
Я работаю над репликацией апплета 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, и ваша установка / удаление изменит дату "Установить на" до сегодняшнего дня.