是否有使用产品 GUID 检索应用程序安装日期的托管 API?
谢谢。斯科特
谢谢罗伯!我在下面添加了一个完整的 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);
}
获取该信息的“正确”方法是使用 ::MsiGetProductInfo()。PInvoke 应该是微不足道的。
我不知道有什么 API 可以做到这一点,但您可以尝试直接从注册表中读取值。检查以下键:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{product-id}
InstallDate = 20081004
存储在卸载键下的信息显示在控制面板 -> 添加或删除程序中。
注册表中的 InstallDate 键并不总是存在,尤其是当程序尚未通过 MSI 安装时(例如Adobe Flash Player Plugin、DAEMON Tools、7-ZIP、Picasa、TeamViewer、Mozilla Firefox)。
另一种“正确”的方法是获取安装程序添加的“确定”某些文件的创建日期。在我的情况下,它是由 Inno setup v5 (重新)创建的“unins000.exe”。不涉及 PInvoke,只需使用 FileInfo 的 Exists 和 CreationTime 属性!