如何使用c#代码将转换mst应用于msi?

时间:2012-07-25 06:07:52

标签: c# .net windows-installer transform

我试图在C#.Net中开发一个工具(使用Windows窗体)。我已经生成了MSI文件和MST(转换文件)。我必须首先读取msi文件(使用表单menustrip菜单项从用户获得输入),然后读取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);

1 个答案:

答案 0 :(得分:1)

虽然目前尚不清楚您面临的问题,但我会为您提供一些一般性建议:

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

希望这可以帮助你。