1

我用 C# 创建了一个自定义操作 (DTF)。
在那个 CA 中,我想从 msi 中提取一个文件(在 wix 中声明为二进制文件)并使用一些参数运行它。
我还没有找到任何样本或帮助。
我必须在 msi 上执行请求,但我想要一个样本。谢谢!

4

1 回答 1

2

DTF.chm 有一个如何更新二进制表的示例。它在“使用 MSI 数据库”主题中。你可以猜出如何做相反的操作。代码可能如下所示:

  using (var db = new Database("test.msi", DatabaseOpenMode.Direct))
  {
    using (var view = db.OpenView("SELECT `Data` FROM `Binary` WHERE `Name` = '{0}'", "testbinary"))
    {
      view.Execute();
      var rec = view.Fetch();

      var inStream = rec.GetStream("Data");
      if (inStream != null)
      {
        using (var file = File.OpenWrite("S:\\testfile.zip"))
        {
          CopyStream(inStream, file);
        }
      }
    }
  }

CopyStream 方法的代码可以从无处不在的 Jon Skeet 的这个答案中获取。请注意,如果您应该从 CA 执行此操作,您将引用数据库对象session.Database,而不是创建它。

于 2011-11-07T09:52:56.607 回答