#c# #installation #wix
#c# #установка #wix
Вопрос:
Допустим, у меня есть такая структура каталогов.
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="test" Name="test">
<Component Id="file" Guid="*">
<File Id="file" Source="file.dll"></File>
</Component>
</Directory>
</Directory>
Это установит файл.dll в C:test . Что я хочу сделать, так это во время установки перезаписать, где этот каталог файлов с C:newpath и вместо этого установите туда файл. Я пробовал это с помощью пользовательского действия, но безуспешно. Я вижу написанную строку отладки, поэтому я знаю, что она вызывается, просто файл все еще установлен в C:test
<InstallExecuteSequence>
<Custom Action="OverwriteDir" After="CostFinalize" />
</InstallExecuteSequence>
[CustomAction]
public static ActionResult OverwriteDir(Session session)
{
System.Diagnostics.Debug.WriteLine(session["tester"]);
session["tester"] = "C:\newpath";
return ActionResult.Success;
}
Что я могу сделать по-другому?
Ответ №1:
Сначала вам нужно убедиться, что папка, содержащая ваш файл внутри MSI, использует общедоступное свойство установщика (в его имени нет строчных букв) в качестве идентификатора. Лучшим решением является TARGETDIR, поскольку он уже настроен.
После этого вы можете использовать одно из этих пользовательских действий для изменения значения свойства во время установки:
- пользовательское действие, которое изменяет значение свойства каталога, запланированное до завершения обработки
- пользовательское действие типа 35, которое изменяет путь к каталогу (должно быть запланировано после завершения обработки)