Get install date from managed code

2020-02-12 05:51发布

Is there a managed API to retrieve an application's install date using the Product GUID?

Thanks. Scott

5条回答
够拽才男人
2楼-- · 2020-02-12 05:56

The "proper" way to get to that information is to use ::MsiGetProductInfo(). PInvoke should be trivial.

查看更多
We Are One
3楼-- · 2020-02-12 06:03

Thanks Rob! I've added a complete C# example below.

    [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);
    }
查看更多
孤傲高冷的网名
4楼-- · 2020-02-12 06:04

Another "proper" way is to get the creation date of some file you know for "sure" is added by installer. In my case it's "unins000.exe" which is (re)created by Inno setup v5. No PInvoke involved but simply use FileInfo's Exists and CreationTime properties!

查看更多
Ridiculous、
5楼-- · 2020-02-12 06:11

I don't know about any API which will do that, but you could try to read the value from the Registry directly. Check the following key:

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

The information stored under the Uninstall key is displayed e.g. in Control Panel -> Add or Remove Programs.

查看更多
叛逆
6楼-- · 2020-02-12 06:17

The InstallDate key in the registry is not always there, especially when the program has not been installed with through MSI (as for example Adobe Flash Player Plugin, DAEMON Tools, 7-ZIP, Picasa, TeamViewer, Mozilla Firefox).

查看更多
登录 后发表回答