2013-09-08 10 views
6

Ich arbeite an der Replikation der Windows 7/8 hinzufügen entfernen Programme Applet mit VBScript. Ich habe das Skript dazu gebracht, alle korrekten Einträge zu enthalten, aber ich konnte es nicht dazu bringen, alle korrekten zusätzlichen Informationen zu enthalten, die Windows anzeigt.Wohin zieht das Hinzufügen/Entfernen von Programmen Daten für die Spalte "Installiert am"?

Beispiel: Windows zeigt die Spalte "Installiert am" mit einem Datum an. In einigen Fällen ist es diese von den entsprechenden Registrierungsschlüssel wie bekommt:

HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\InstallDate 
HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\InstallDate 
HKUS\USER - SID\Software\Microsoft\Windows\CurrentVersion\Uninstall\InstallDate 

Nur sehr wenige Tasten haben tatsächlich den Wert Install und Windows immer diese Spalte gefüllt werden. Ich habe es geschafft, die Mehrheit der fehlenden stammt aus dem WMI zu greifen:

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

Dies gibt nur die Daten von MSI installierten Anwendungen.

Ich dachte, vielleicht Windows "erraten" die Daten auf der Grundlage von Programmdateien/ProgramData Dateidaten, aber ich habe versucht, sie manuell zu ändern, und es ist nicht in Add/Remove widerspiegeln. Ich versuche herauszufinden, wie Windows dieses Datum zieht. Ich habe bemerkt, CCleaner kann add/remove ohne Fehler reproduzieren, so dass diese Informationen irgendwo verfügbar sind. Ich habe mich erschöpft, um danach zu suchen.

+0

Der Prozess ist wahrscheinlich langsam, weil die Auswahl von 'Win32_Product' nicht nur die Objekte auflistet, sondern auch (erneut) validiert. Eine sauberere Möglichkeit besteht darin, die Informationen aus den 'Uninstall'-Schlüsseln in der Registrierung zu lesen. –

+0

Mein Problem ist, dass die meisten Daten nicht in den Deinstallationsschlüsseln sind, wie ich bereits erwähnt habe. Weniger als 10% der Einträge auf meinem System haben das InstallDate als Wert. Windows bekommt dieses Datum von woanders und das Skript wird nicht wirklich funktionieren, bis ich weiß, wo sich dieser Ort befindet. – KevinD

Antwort

14

Nach viel Herumspielen stellte ich fest, dass die Windows-Programme hinzufügen/entfernen das Datum aus mindestens drei potenzielle Standorte „On installiert“ wird:

  • Für MSI-Anwendungen installiert es wird das Datum von Win32_Product (Bei weitem die gängigste Methode)

  • Für Nicht-MSI-Anwendungen sucht es nach dem InstallDate-Wert in der entsprechenden Registrierung Deinstallationsschlüssel (Beispiel: HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ Google Chrome)

  • Für Nicht-MSI-Anwendungen, die nicht über das InstallDate verfügen, sucht Windows nach dem letzten Datum, an dem der Deinstallationsschlüssel geschrieben wurde, und verwendet dieses Datum für "Installiert am".

Es war diese letzte Methode, die mich so lange ratlos hatte. Das bedeutet, dass jedes Mal, wenn ein Nicht-MSI-Programm, dem der InstallDate-Wert fehlt, aktualisiert wird und die Versionsnummer im Deinstallationsschlüssel geändert wird, wird das "Installiert am" -Datum ebenfalls aktualisiert und hat das Aussehen dieses Programms wurde gerade installiert.

Ein Beispiel: HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ Currentversion \ Uninstall \ Adobe Flash Player Plugin

Wenn Flash Player Plugin installieren nicht MSI basiert, dann können Sie in diesem Schlüssel gehen und ändern Die Version von 11.8.800.94 bis 11.8.800.93 und Ihr Add/Remove wird das "Install On" -Datum auf heute ändern.

+0

perfekte Antwort! – Xaruth

+0

Danke. Das hat mich genauso verblüfft wie Version. Ich werde die Version auch in der WIN32_Product-Klasse überprüfen - ich werde höchstwahrscheinlich dort sein. – anil

+0

perfekt! Danke vielmals – Frank