8

我正在使用 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 文件日期“猜测”了日期,但我尝试手动更改它们,但它没有反映在添加/删除中。我试图弄清楚 Windows 是如何得出这个日期的。我注意到 CCleaner 可以无错误地重现添加/删除,因此此信息在某处可用。我已经筋疲力尽地寻找它。

4

1 回答 1

16

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

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

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

  • 对于没有 InstallDate 的非 MSI 应用程序,Windows 会查看 Uninstall 密钥被写入的最后日期,并将该日期用于“Installed On”。

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

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

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

于 2013-09-08T21:15:11.963 回答