2009-01-05 5 views

Répondre

8

La "bonne" façon d'obtenir cette information est d'utiliser :: MsiGetProductInfo(). PInvoke devrait être trivial.

1

Je ne connais aucune API qui fera cela, mais vous pouvez essayer de lire directement la valeur directement dans le registre. Vérifiez la clé suivante:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{product-id} 
    InstallDate = 20081004 

Les informations stockées sous la clé de désinstallation sont affichées par ex. dans le Panneau de configuration -> Ajouter ou supprimer des programmes.

10

Merci Rob! J'ai ajouté un exemple complet de C# ci-dessous.

[DllImport("msi.dll", CharSet = CharSet.Unicode)] 
    static extern Int32 MsiGetProductInfo(string product, string property, [Out] StringBuilder valueBuf, ref Int32 len); 

    static void Main(string[] args) 
    { 
     Int32 len = 512; 
     var builder = new StringBuilder(len); 
     MsiGetProductInfo("{0db93d2f-a9e7-417f-9425-5e61e82c0868}", "InstallDate", builder, ref len); 

     var installDate = DateTime.ParseExact(builder.ToString(), "yyyyMMdd", CultureInfo.InvariantCulture); 

     Console.WriteLine(installDate); 
    } 
0

La clé InstallDate dans le Registre est pas toujours là, surtout lorsque le programme n'a pas été installé avec par MSI (par exemple Adobe Flash Player Plugin, Daemon Tools, 7-ZIP, Picasa, TeamViewer, Mozilla Firefox).

0

Une autre manière "correcte" est d'obtenir la date de création d'un fichier que vous savez "sûr" d'être ajouté par le programme d'installation. Dans mon cas c'est "unins000.exe" qui est (re) créé par Inno setup v5. Aucun PInvoke impliqué, mais simplement utiliser les propriétés Exists et CreationTime de FileInfo!

Questions connexes