从 .msi 读取平台信息

Dan*_*iel 5 c# installation windows-installer orca dtf

我正在使用这些Microsoft.Deployment.WindowsInstaller库从 .msi 文件中读出值。属性没问题,summary-information也可以读出,例如:

 static void Main(string[] args)
 {
    using (var database = new QDatabase(@"C:\myMsi.msi", DatabaseOpenMode.ReadOnly))
    {
         Console.WriteLine(database.ExecutePropertyQuery("ProductVersion"));
         Console.WriteLine(database.ExecutePropertyQuery("ProductName"));
         Console.WriteLine(database.ExecutePropertyQuery("Manufacturer"));
         Console.WriteLine(database.ExecutePropertyQuery("ARPREADME"));
     }
 }
Run Code Online (Sandbox Code Playgroud)

QDatabase对象甚至有一个很好的SummaryInfo属性,保存摘要信息。但是,我还没有找到如何获取 .MSI 所针对的平台。

好像可以读出平台,因为Orca也是这样做的(在Orca中打开Summary Information就可以看到平台)。

我怎样才能获得 .msi 所针对的平台?

Chr*_*ter 5

您正在使用一个用于对数据库进行 LINQ 查询的类。ExecutePropertyQuery 是一种简化查询属性表的方法。正如您所指出的,您要查找的信息不在属性表中,而是在摘要信息流中。具体来说:

模板摘要属性

using Microsoft.Deployment.WindowsInstaller;
using(Database database = new Database(PATH_TO_MSI, DatabaseOpenMode.ReadOnly))
{
  Console.WriteLine(database.SummaryInfo.Template);
}
Run Code Online (Sandbox Code Playgroud)

QDatabase 类还公开了 SummaryInfo 属性,因为它扩展了 Database 类。

可查询的 MSI 数据库 - 使用 LINQ 查询功能以及通用表的预定义实体类型扩展了基本数据库类。

  • 对于未来的读者:检查 64 是否出现在 SummaryInfo.Template 字符串中,仅当我们对 Intel64 和 x64 安装程序之间的区别不感兴趣时​​才有效,请参阅 http://msdn.microsoft.com/en-us/library/aa372070( v=vs.85).aspx 为实际可能的值。 (2认同)