Передача динамических свойств в отложенные пользовательские действия WIX - PullRequest
0 голосов
/ 05 мая 2018

Я хочу передать каталог установки моим другим настраиваемым действиям. У меня есть собственность

<Property Id="CA1Action" Value="InstallDir=[INSTALLFOLDER]"/>

Тогда я определил CA в Wix

<CustomAction Id="CA1Action"
          BinaryKey="InstallerActionsBinary"
          DllEntry="CA1"
          Execute="commit"
          Return="check" />

Для завершения я называю свой CA как

<Custom Action="CA1Action" After="InstallFiles"></Custom>

При выполнении моего установщика с помощью MSIEXEC я получаю следующее сообщение об ошибке из своего пользовательского действия, которое пытается открыть файл из установки:

Не удалось найти файл 'C: \ Windows \ Installer \ MSICA8C.tmp- \ C: \ Program Files \ MyProgram \ web.config'.

Вот способ извлечения информации из сеанса:

public static ActionResult CA1(Session session_)
{
        //Collect parameters from Session
        CustomActionData data = session_.CustomActionData;
        string path = data["InstallDir"];
}

Мой первый вопрос: почему к моему параметру добавлен кэш установщика? Чтобы еще больше добавить к моей путанице, когда я добавил

path = path.Substring("C:\Windows\Installer\MSICA8C.tmp-\".Length);

в мой ЦС для удаления "C: \ Windows \ Installer \ MSICA8C.tmp- \", я получаю исключение аргумента, говорящее мне, что начальное значение подстроки больше, чем длина моей строки .. Так что я добавил регистрируясь в моем ЦС, и вижу, что путь устанавливается на «[INSTALLFOLDER]», а не на значение свойства, но как это значение свойства, когда я использую его в пути для моего FileStream?

Я следил за ответами в этом посте: Как передать параметры в пользовательское действие?

1 Ответ

0 голосов
/ 06 мая 2018

Непонятно, почему вы используете пользовательское действие коммита, а затем упорядочиваете его после InstallFiles. Подтверждение пользовательских действий запуск после InstallFinalize. Скорее всего, у вас должно быть отложенное пользовательское действие.

Другая проблема заключается в том, что определение свойства CA1Action со значением, включающим [INSTALLFOLDER], вряд ли будет работать, поскольку [INSTALLFOLDER] не определено до тех пор, пока не будет выполнен какой-либо пользовательский интерфейс или другие пользовательские действия, которые устанавливают его значение. То, что вам нужно, это явное настраиваемое действие «установить свойство», которое упорядочивается непосредственно перед фактическим вызовом настраиваемого действия. Пример, на который вы ссылаетесь, имеет имя SetDirProp.

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

...