7

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

谢谢。斯科特

4

5 回答 5

10

谢谢罗伯!我在下面添加了一个完整的 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);
    }
于 2009-01-06T00:41:23.570 回答
8

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

于 2009-01-06T00:09:39.470 回答
1

我不知道有什么 API 可以做到这一点,但您可以尝试直接从注册表中读取值。检查以下键:

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

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

于 2009-01-05T22:32:18.697 回答
0

注册表中的 InstallDate 键并不总是存在,尤其是当程序尚未通过 MSI 安装时(例如Adob​​e Flash Player Plugin、DAEMON Tools、7-ZIP、Picasa、TeamViewer、Mozilla Firefox)。

于 2013-04-05T13:18:02.673 回答
0

另一种“正确”的方法是获取安装程序添加的“确定”某些文件的创建日期。在我的情况下,它是由 Inno setup v5 (重新)创建的“unins000.exe”。不涉及 PInvoke,只需使用 FileInfo 的 Exists 和 CreationTime 属性!

于 2016-01-26T23:36:55.263 回答