"添加/删除程序"在哪里提取"Installed On"列的数据?



我正在努力使用 VBScript 复制 Windows 7/8 添加删除程序小程序。我已经让脚本包含所有正确的条目,但我无法让它包含 Windows 显示的所有正确的附加信息。

例如:Windows 显示带有日期的"安装日期"列。 在某些情况下,它会从相关的注册表项中获取这些,例如:

HKLMSoftwareMicrosoftWindowsCurrentVersionUninstallInstallDate
HKLMSoftwareWow6432NodeMicrosoftWindowsCurrentVersionUninstallInstallDate
HKUSUSER - SIDSoftwareMicrosoftWindowsCurrentVersionUninstallInstallDate

很少有键实际上具有 InstallDate 值,Windows 总是填充此列。我已经设法从WMI中获取了大部分缺失的日期:

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

这仅提供 MSI 已安装应用程序的日期。

我在想也许 Windows 根据程序文件/程序数据文件日期"猜测"日期,但我尝试手动更改它们,但它没有反映在添加/删除中。我试图弄清楚Windows如何拉出这个日期。我注意到 CCleaner 可以重现添加/删除而不会出错,因此此信息在某处可用。我只是疲惫地寻找它。

经过一番混乱,我确定Windows添加/删除程序至少从三个潜在位置获取"安装日期"日期:

  • 对于MSI安装的应用程序,它从WIN32_Product获取日期(迄今为止最常见的方式)

  • 对于非 MSI 应用程序,它会在相应的注册表卸载密钥中查找 InstallDate 值(例如:HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome)

  • 对于没有安装日期的非 MSI 应用程序,Windows 会查看卸载密钥写入的最后日期,并将该日期用于"安装日期"。

正是这最后一种方法让我难倒了这么久。 这意味着每当更新缺少 InstallDate 值的非 MSI 程序,并且修改卸载密钥中的版本号时,您都会注意到"安装日期"日期也会更新,并显示该程序刚刚安装的外观。

示例:HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Flash Player 插件

如果您的Flash Player插件安装不是基于MSI的,那么您可以进入此键并将版本从11.8.800.94修改为11.8.800.93,并且您的添加/删除会将"安装日期"更改为今天。

最新更新