Как извлечь и запустить файл во время установки - PullRequest
1 голос
/ 07 ноября 2011

Я создал Custom Action (DTF) с C #.
В этом CA я хотел бы извлечь файл из msi (объявлен как двоичный в wix) и запустить его с некоторыми аргументами.Я не нашел ни образцов, ни справки по этому поводу.
Мне нужно выполнить запрос в MSI, но я хотел бы получить образец.Спасибо!

1 Ответ

2 голосов
/ 07 ноября 2011

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 можно взять из этого ответа вездесущего Джона Скита .Обратите внимание, что если вы сделаете это из CA, вы будете ссылаться на объект базы данных, например session.Database, вместо того, чтобы создавать его.

...