我正在使用 VBScript 复制 Windows 7/8 添加删除程序小程序。我已获得包含所有正确条目的脚本,但我无法使其包含 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 文件日期“猜测”了日期,但我已经尝试手动更改它们,但它没有反射(reflect)在添加/删除中。我想弄清楚 Windows 是如何提取这个日期的。我注意到 CCleaner 可以无误地重现添加/删除,所以这个信息在某处可用。我已经筋疲力尽地寻找它。
最佳答案
经过一番折腾后,我确定 Windows 添加/删除程序至少从三个可能的位置获取“安装日期”:
对于 MSI 安装的应用程序,它从 WIN32_Product 获取日期(迄今为止最常用的方法)
对于非 MSI 应用程序,它会在相应的注册表卸载键中查找 InstallDate 值(示例:HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome)
对于没有 InstallDate 的非 MSI 应用程序,Windows 会查找写入卸载 key 的最后日期,并将该日期用于“安装日期”。
正是最后这个方法让我难住了这么久。这意味着每当更新缺少 InstallDate 值的非 MSI 程序,并且修改卸载 key 中的版本号时,您会注意到“安装日期”也会更新并显示该程序的外观刚刚安装。
一个例子:HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Flash Player Plugin
如果您的 Flash Player 插件安装不是基于 MSI,那么您可以进入此 key 并将版本从 11.8.800.94 修改为 11.8.800.93,然后您的添加/删除会将“安装日期”更改为今天。
关于windows - 添加/删除程序在哪里提取 "Installed On"列的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18679441/