【问题标题】:How to Apply an Transform mst to msi using c# code?如何使用 c# 代码将转换 mst 应用于 msi?
【发布时间】:2012-07-23 12:37:59
【问题描述】:

我正在尝试在 C# .Net 中开发一个工具(使用 Windows 窗体)。我已经生成了一个 MSI 文件和一个 MST(转换文件)。我必须首先读取 msi 文件(使用表单菜单菜单项从用户获取输入),然后读取 mst 文件(与 msi 作为输入的方式相同)。接下来,通过复制输入的 msi 创建一个临时 msi(可能在临时位置)并将转换应用于该临时 msi。然后,我可以根据我的要求查询 msi 表(与 mst 合并)。我正在使用 Visual Studio 2010 专业版。这是我使用 Windows 安装程序参考库编写的一段代码。

      using System;
      using System.ComponentModel;
      using System.Windows.Forms;
      using WindowsInstaller;
      using System.Xml;
      using System.IO;

        //// Create an Installer instance
        Type classType = Type.GetTypeFromProgID("WindowsInstaller.Installer");
        Object installerObj = Activator.CreateInstance(classType);
        Installer installer = installerObj as Installer;
        Database database = Installer.OpenDatabase(File_MSI,MsiOpenDatabaseMode.
         msiOpenDatabaseModeTransact);
            database.ApplyTransform (File_MST, MsiTransformError.msiTransformErrorViewTransform);
            WindowsInstaller.View viewmst = null;
            string sqlquerymst = string.Format("Select * FROM _TransformView");
            viewmst = database.OpenView(sqlquerymst);
            viewmst.Execute(null);
            database.Commit();
            viewmst.Close();
            string sql = String.Format("Select Property,Value FROM Property");
            WindowsInstaller.View view = database.OpenView(sql);
            view.Execute(null);

【问题讨论】:

    标签: c# .net windows-installer transform


    【解决方案1】:

    虽然不清楚你面临什么问题,但我有一些一般性的建议给你:

    • 即使您没有使用WiX toolset 来构建您的 MSI 包,您也可以利用其 .NET API 来处理 MSI 包,称为 DTF。您可以在与 WiX 工具集一起安装的 DTF.chm 文件中找到更多信息。例如,看看Database 类及其ApplyTransform() 方法
    • 您描述的场景听起来有点棘手,我怀疑它可以简化。如果您将转换应用于 MSI 包以读取该转换带来的内容,则在构建此转换时在较早的步骤中获取该数据可能会容易得多,并避免查询 MSI 数据库,这不是最简单的事情。当然,这是指您自己制作转换的情况,而不是第三方的东西

    希望这对您有任何帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多