从.msi中读取平台信息

时间:2014-11-12 13:53:06

标签: c# installer windows-installer orca dtf

我使用Microsoft.Deployment.WindowsInstaller库从.msi文件中读取值。属性没有问题,也可以读出摘要信息,例如:

 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所针对的平台?

1 个答案:

答案 0 :(得分:4)

您正在使用一个用于执行数据库LINQ查询的类。 ExecutePropertyQuery是一种简化查询Property table的方法。如您所知,您所寻求的信息不在财产表中,而是在Summary Information Stream中。具体做法是:

Template Summary property

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

QDatabase类在扩展Database类时也会公开SummaryInfo属性。

  

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