Как использовать настраиваемые модули слияния в Wix? - PullRequest
6 голосов
/ 19 января 2010

AFAIK это сделано так:

Продукт:

<Merge Id ="HelpInstaller" SourceFile="HelpInstaller.msm" Language="1033" DiskId="1">
                <ConfigurationData Name="SurpressInstallation_Config" Value="&amp;HelpFeature"/>
 </Merge>

Модуль слияния:

<Property Id="SupressInstallation" Value='0'  />

<Substitution Table='CustomAction' Row='SetSupressInstallationProperty' Column='Target' Value='[=SupressInstallation_Config]'/>
<CustomAction Id='SetSupressInstallationProperty' Property='SupressInstallation'      Value='[SupressInstallation]'/>  
<InstallExecuteSequence>
  <Custom Action='SetSupressInstallationProperty' Before='RegisterHelp' />
  <Custom Action='RegisterHelp' After='CostFinalize'>(NOT Installed) AND (NOT UPGRADINGPRODUCTCODE) AND SupressInstallation = 3) </Custom>
</InstallExecuteSequence>

Но когда я сделал это, как описано выше, я получаю сообщение об ошибке: Обнаружена непредвиденная ошибка слияния типа «msmErrorDataRequestFailed», для которой в настоящее время нет сообщения об ошибке для отображения.

Может кто-нибудь сказать мне, как решить эту проблему? Что я в основном хочу сделать, это выполнить пользовательское действие в модуле слияния, только когда выбрана определенная функция. Это правильный способ сделать это? Спасибо Даниэль

Ответы [ 3 ]

5 голосов
/ 07 декабря 2012

Вы должны определить узел конфигурации в модуле:

<Property Id="SupressInstallation" Value='0'  />
<Configuration Name="SupressInstallation_Config" Format="Text"/>
<Substitution Table='CustomAction' Row='SetSupressInstallationProperty' Column='Target' Value='[=SupressInstallation_Config]'/>
<CustomAction Id='SetSupressInstallationProperty' Property='SupressInstallation'      Value='[SupressInstallation]'/>  
<InstallExecuteSequence>
  <Custom Action='SetSupressInstallationProperty' Before='RegisterHelp' />
  <Custom Action='RegisterHelp' After='CostFinalize'>(NOT Installed) AND (NOT UPGRADINGPRODUCTCODE) AND SupressInstallation = 3) </Custom>
</InstallExecuteSequence>
1 голос
/ 21 февраля 2012

Звучит как ошибка. Вы должны по крайней мере получить более описательное сообщение об ошибке, объясняющее, что пошло не так. Не стесняйтесь подавать ошибку на http://wixtoolset.org/bugs

0 голосов
/ 14 декабря 2011

Функция зависит от модуля слияния, а не наоборот. Ничто в модуле слияния не должно иметь ссылки на что-либо вне модуля слияния, такое как имя ProductName, ProductCode или Feature, поскольку это будет тесно связывать модуль слияния с конкретным продуктом, а не быть универсальным модулем многократного использования. Это, по сути, создаст круговую ссылку, а не является идеей.

Что вам, вероятно, нужно (трудно сказать, не зная дополнительной информации), это использовать состояние действия одного из Компонентов в модуле слияния для вашего условия.

Например, если в компоненте 1 есть файл1, и вам нужно знать значение_1 для запуска при установке этого компонента / файла, вы должны использовать выражение:

$ component1 = 3 // INSTALLSTATE_LOCAL

Таким образом, если этот модуль слияния будет объединен с Product1, Product 2 или Product3 с именем компонента A, B или C, это не будет иметь значения, поскольку связь находится на уровне компонента.

Если функция, к которой вы пытаетесь привязать, - это другая функция, то все это нужно переместить в другой модуль слияния, который будет объединен с этой функцией. Возможно, вам потребуется создать фиктивный компонент для сопоставления.

Теперь, если вы хотите проигнорировать весь этот совет, тогда посмотрите на оператор состояния Feature Action и тщательно отсоединитесь.

Синтаксис условного оператора

...