Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从托管代码获取安装日期_C#_Wix_Windows Installer - Fatal编程技术网

C# 从托管代码获取安装日期

C# 从托管代码获取安装日期,c#,wix,windows-installer,C#,Wix,Windows Installer,是否存在使用产品GUID检索应用程序安装日期的托管API 谢谢。 Scott我不知道有哪种API可以做到这一点,但您可以尝试直接从注册表读取值。检查以下键: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{product-id} InstallDate = 20081004 卸载键下存储的信息显示在控制面板->添加或删除程序中 获取该信息的“正确”方法是使用::MsiGetProductIn

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

谢谢。
Scott

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

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

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

获取该信息的“正确”方法是使用::MsiGetProductInfo()。PInvoke应该很简单。

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

注册表中的InstallDate键并不总是在那里,特别是当程序没有通过MSI安装时(例如Adobe Flash Player插件、守护程序工具、7-ZIP、Picasa、TeamViewer、Mozilla Firefox)。

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