从托管代码获取安装日期

时间:2009-01-05 21:53:27

标签: c# wix windows-installer

是否有托管API使用产品GUID检索应用程序的安装日期?

感谢。 斯科特

5 个答案:

答案 0 :(得分:10)

谢谢Rob!我在下面添加了一个完整的C#示例。

    [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);
    }

答案 1 :(得分:8)

获取该信息的“正确”方法是使用:: MsiGetProductInfo()。 PInvoke应该是微不足道的。

答案 2 :(得分:1)

我不知道任何API会这样做,但您可以尝试直接从注册表中读取值。检查以下键:

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

显示存储在卸载密钥下的信息,例如在控制面板中 - >添加或删除程序。

答案 3 :(得分:0)

注册表中的InstallDate键并不总是存在,特别是当程序尚未通过MSI安装时(例如 Adob​​e Flash Player插件,DAEMON工具,7-ZIP,Picasa,TeamViewer,Mozilla Firefox )。

答案 4 :(得分:0)

另一个"适当"方法是获取你知道的某个文件的创建日期"确定"由安装程序添加。就我而言,它是" unins000.exe"这是由Inno setup v5(重新)创建的。没有涉及PInvoke,只需使用FileInfo的Exists和CreationTime属性!