如何在安装期间提取和运行文件

时间:2011-11-07 08:19:32

标签: wix wix3.5 dtf

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

1 个答案:

答案 0 :(得分: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方法的代码可以从this answer of omnipresent Jon Skeet获取。请注意,如果您应该从CA执行此操作,则将引用数据库对象,如session.Database,而不是创建它。