Пользовательское действие перезаписи пути к папке в пользовательском интерфейсе WIX

#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, которое изменяет путь к каталогу (должно быть запланировано после завершения обработки)