【问题标题】:Read Platform information from .msi从 .msi 读取平台信息
【发布时间】:2014-11-12 13:53:05
【问题描述】:

我正在使用 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 所针对的平台?

【问题讨论】:

    标签: c# installation windows-installer orca dtf


    【解决方案1】:

    您正在使用一个用于对数据库进行 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 类还公开了 SummaryInfo 属性,因为它扩展了 Database 类。

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

    【讨论】:

    • 其实我没有看到Database类也有ExecutePropertyQuery函数,这真的说明我不需要QDatabase(Linq)版本。非常感谢您的回答,我现在将检查“64”是否出现在 SummaryInfo.Template 字符串中的某处。
    • 对于未来的读者:仅当我们对 Intel64 和 x64 安装程序之间的区别不感兴趣时​​,检查 SummaryInfo.Template 字符串中是否出现 64 才有效,请参阅msdn.microsoft.com/en-us/library/aa372070(v=vs.85).aspx 了解实际可能的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多