2009-01-05 15 views

Respuesta

8

La forma "correcta" de obtener esa información es usar :: MsiGetProductInfo(). PInvoke debería ser trivial.

1

No conozco ninguna API que lo haga, pero podría tratar de leer directamente el valor del Registro. Compruebe la siguiente clave:

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

La información almacenada en la clave Desinstalar se muestra, p. en el Panel de control -> Agregar o quitar programas.

10

Gracias Rob! He agregado un ejemplo completo de C# a continuación.

[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 clave InstallDate en el registro no es siempre allí, especialmente cuando el programa no se ha instalado con a través de MSI (como por ejemplo Adobe Flash Player Plugin, Daemon Tools, 7-ZIP, Picasa, TeamViewer, Mozilla Firefox).

0

Otra forma "correcta" es obtener la fecha de creación de algún archivo que usted sabe porque "seguro" es agregado por el instalador. En mi caso es "unins000.exe" que es (re) creado por Inno setup v5. No involucra a PInvoke, ¡simplemente utiliza las propiedades Exists y CreationTime de FileInfo!

Cuestiones relacionadas