我正在使用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可以重现添加/删除而不会出错,所以这些信息可以在某处获得。我只是筋疲力尽地寻找它。
答案 0 :(得分:15)
经过大量的讨论后,我确定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 \ Adobe Flash Player插件
如果您的Flash Player插件安装不是基于MSI的,那么您可以使用此密钥并将版本从11.8.800.94修改为11.8.800.93,并且您的添加/删除会将“安装日期”更改为今天。