Пользовательское действие WIX UI Overwrite Folder Path - PullRequest
1 голос
/ 22 октября 2011

Допустим, у меня есть эта структура каталогов.

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="test" Name="test">
    <Component Id="file" Guid="*">
      <File Id="file" Source="file.dll"></File>
    </Component>
  </Directory>
</Directory>

Это установит file.dll в C: \ test. То, что я хочу сделать, это во время перезаписи установки, где этот каталог файлов с C: \ newpath \ и установить файл вместо этого. Я попробовал это с Custom Action без удачи. Я вижу строку отладки, написанную так, что я знаю, что она вызывается, просто файл все еще установлен в 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 Ответ

1 голос
/ 23 октября 2011

Сначала необходимо убедиться, что папка, в которой находится ваш файл внутри MSI, использует в качестве идентификатора общедоступное свойство установщика (без строчных букв в имени). Лучшее решение - TARGETDIR, потому что оно уже настроено.

После этого вы можете использовать одно из следующих пользовательских действий для изменения значения свойства во время установки:

  • настраиваемое действие, которое изменяет значение свойства каталога, запланированное до CostFinalize
  • a настраиваемое действие типа 35 , которое изменяет путь к каталогу (должно быть запланировано после CostFinalize)
...