Создание временной папки во время установки в 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 позаботился об извлечении файлов в нужное место, чтобы сделать его доступным для кода настраиваемого действия, и очистке после выполнения задания.
Надеюсь, что этот обзор поможет понять, как это работает.