Создание временной папки во время установки в WiX

В WiX, как создать временную скрытую папку (например, SUPPORTDIR In IS) на целевом компьютере, во время установки и как добавить к ней файлы, которые хранятся в двоичной таблице, а затем впоследствии удалить ее после завершения установки в Wix?

Благодарен любой помощи.

Благодарю.

1 ответ

Это пример решения, которое расширяет идею, на которую я ссылался в своем собственном комментарии.

Короче говоря, вам не нужно усложнять решение, добавляя дополнительные файлы в двоичную таблицу, извлекая их в настраиваемом действии и удаляя впоследствии. Встроенный механизм пользовательских действий DTF сделает это за вас.

Допустим, у вас есть XML-файл, который вы хотите прочитать в пользовательском действии, чтобы вывести некоторую информацию в файл журнала установки. Прежде всего, вы должны создать проект Custom Action в VS (File -> New -> Project... и выбрать шаблон "C# Custom Action project").

Затем добавьте файл XML в качестве содержимого: щелкните правой кнопкой мыши проект в обозревателе решений, выберите "Добавить" -> "Новый элемент" и выберите файл XML. Давайте назовем это data.xml, Содержимое может выглядеть так:

<?xml version="1.0" encoding="utf-8" ?>
<settings>
  <setting name="a" value="one" />
  <setting name="b" value="two" />
</settings>

Затем добавьте некоторый код, чтобы прочитать значения из этого XML и записать что-то в журнал установки (помните, это всего лишь пример):

[CustomAction]
public static ActionResult ReadXml(Session session)
{
  var doc = XDocument.Load("data.xml");
  var settings = from setting in doc.Descendants("setting")
                 select new
                 {
                   Name = setting.Attribute("name").Value,
                   Value = setting.Attribute("value").Value
                 };

  foreach (var setting in settings)
  {
    session.Log(string.Format("{0} = {1}", setting.Name, setting.Value));
  }

  return ActionResult.Success;
}

Обратите внимание, что я ссылаюсь на файл XML просто data.xml - при выполнении настраиваемого действия файл будет найден в том же каталоге, из которого он запущен.

Наконец, добавьте ваше настраиваемое действие в процесс установки:

<Binary Id="MainBinary" SourceFile="bin\ExtraFiles.CA.dll" />
<CustomAction Id="ReadXmlCA" BinaryKey="MainBinary" DllEntry="ReadXml" Execute="deferred" />

<InstallExecuteSequence>
  <Custom Action="ReadXmlCA" After="InstallFiles" />
</InstallExecuteSequence>

Теперь соберите пакет MSI и запустите установку следующим образом:

msiexec -i SupportDir.msi /l*v install.log

Когда установка пакета завершится, откройте install.log файл и поиск CustomActions.ReadXml, Вы увидите что-то вроде этого:

SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSIAB8D.tmp-\
SFXCA: Binding to CLR version v4.0.30319
Calling custom action ExtraFiles!ExtraFiles.CustomActions.ReadXml
a = one
b = two

Очевидно, что пользовательское действие сделало свое дело: оно прочитало содержимое файла XML и вывело правильную информацию в файл журнала. Еще одна вещь, на которую следует обратить внимание: путь к временному каталогу. Попробуйте перейти в этот каталог - вы обнаружите, что он пуст.

Это означает, что DTF позаботился об извлечении файлов в нужное место, чтобы сделать его доступным для кода настраиваемого действия, и очистке после выполнения задания.

Надеюсь, что этот обзор поможет понять, как это работает.

Другие вопросы по тегам