Wix: переназначить RegisrySearch и установить свойство в модуле слияния - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть модуль слияния, который ищет некоторые места в реестре, чтобы прочитать значения и сохранить их в свойствах.Вот фрагмент кода:

  <Fragment Id="RegSearch">
<Property Id="HOST_APP_PATH" >
  <RegistrySearch Id="HOST_App"  
                  Root="HKLM"
                  Key="SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\HOST.exe"
                  Name="Path"
                  Type="raw"
                  />
</Property>
<Property Id="HOST_ROOT_PATH" >
  <RegistrySearch Id="HOST_Root"
                  Root="HKLM"
                  Key="SOFTWARE\HostApplication\Installation Info"
                  Name="HOST_Root"
                  Type="raw"
                  />
</Property>

Установщик Windows помещает этот поиск в настраиваемое действие AppSearch.

Проблема: AppSearch выполняет этот поиск очень рано, до того, как WriteRegistryValues ​​хост-установщика не получит никаких значений, и свойства с этим поиском не будут определены, поскольку реестр для поиска былникогда не пишется там.

Вопрос 1: Можем ли мы перенести этот поиск в реестре из модуля слияния после WriteRegistryValues ​​хост-установщика?

Вопрос 2: Является лиЕсть ли другой способ поиска реестра после того, как Host Installer выполняет WriteRegistryValues?Возможно, с каким-то настраиваемым действием?

1 Ответ

0 голосов
/ 26 апреля 2018

AppSearch - это стандартное действие, предоставляемое установщиком Windows, и по замыслу предназначено для запуска очень рано.Это связано с тем, что он часто используется стандартным действием LaunchConditions, чтобы решить, можно ли продолжить установку или нет.Это также полезно для определения того, должны ли быть установлены компоненты и компоненты.

MSI - очень продуманный фреймворк.Я подозреваю, что что-то не так с вашим текущим дизайном, который будет несовместим с MSI.

Является ли установщик хоста тем же MSI или другим MSI?Если предположить, что это то же самое, почему вы не можете просто поместить свои данные в некоторые свойства MSI и использовать эти свойства для записи в реестр?Тогда вам не нужно будет считывать значения обратно, потому что они уже есть в свойствах.

Для чего вам нужны эти свойства после записи их в реестр?Обычно запись их в реестр будет конечной игрой.Я не уверен, что вы будете делать дальше.

Если host.msi - это другой MSI, почему у вас один MSI устанавливает другой MSI?Это не дизайн MSI.В этом случае вам понадобится загрузчик.Хост MSI запускается первым, затем этот MSI.Но даже тогда странно, что второй MSI будет зависеть от свойств, установленных первым MSI.Я думаю, что пользовательский интерфейс загрузчика и приложение соберут эту информацию и передадут ее в виде безопасных настраиваемых общедоступных свойств обоим MSI.

Чтобы ответить на вопрос 1: модуль слияния не может только вставить действия в последовательность.Это не может перенести действия.2: Вы должны будете использовать настраиваемое действие.Но, как я сказал выше, мне кажется, что это неправильный путь.

...