5

我正在使用这些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"));
     }
 }

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

似乎可以读出平台,因为 Orca 也这样做(在 Orca 中打开摘要信息时可以看到平台)。

如何获得 .msi 所针对的平台?

4

1 回答 1

5

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

模板摘要属性

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

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

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

于 2014-11-12T14:52:26.980 回答