添加/删除程序在哪里为"已安装"列添加数据?

Kev*_*inD 8 windows vbscript wmi date addremoveprograms

我正在使用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
Run Code Online (Sandbox Code Playgroud)

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

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

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

我想也许Windows"猜到"基于Program Files/ProgramData文件日期的日期,但我尝试手动更改它们并没有反映在添加/删除中.我正在试图弄清楚Windows如何拉动这个日期.我注意到CCleaner可以重现添加/删除而不会出错,所以这些信息可以在某处获得.我只是筋疲力尽地寻找它.

Kev*_*inD 16

在经历了很多混乱之后,我确定Windows添加/删除程序从至少三个潜在位置获得"已安装"日期:

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

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

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

这是最后一种让我难以忍受的方法.这意味着每次更新缺少InstallDate值的非MSI程序,并且修改了卸载密钥中的版本号时,您会注意到"Installed On"日期也会更新并给出该程序的外观刚安装好了.

示例:HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Adob​​e Flash Player插件

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