我使用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所针对的平台?
答案 0 :(得分:4)
您正在使用一个用于执行数据库LINQ查询的类。 ExecutePropertyQuery是一种简化查询Property table的方法。如您所知,您所寻求的信息不在财产表中,而是在Summary Information Stream中。具体做法是:
using Microsoft.Deployment.WindowsInstaller;
using(Database database = new Database(PATH_TO_MSI, DatabaseOpenMode.ReadOnly))
{
Console.WriteLine(database.SummaryInfo.Template);
}
QDatabase类在扩展Database类时也会公开SummaryInfo属性。
可查询的MSI数据库 - 使用LINQ扩展基础数据库类 查询功能以及常见的预定义实体类型 表。