2010-01-19 19 views
6

AFAIK to się robi tak:Jak korzystać z konfigurowalnych modułów Merge w Wix?

produktu:

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

Moduł 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> 

Ale gdy zrobiłem to jak wyżej, pojawia się błąd: Wystąpił nieoczekiwany błąd scalania typu "msmErrorDataRequestFailed", dla którego nie ma obecnie komunikatu o błędzie do wyświetlenia.

Czy ktoś może mi powiedzieć, jak rozwiązać ten problem? Co zasadniczo chcę zrobić, to wykonać niestandardową akcję w module scalania tylko wtedy, gdy wybrana jest pewna funkcja. Czy jest to właściwy sposób na zrobienie tego? Dzięki Daniel

Odpowiedz

0

Funkcja ma zależność od modułu scalającego, a nie odwrotnie. Nic w module scalającym nie powinno mieć odniesienia do niczego poza modułem scalającym, takim jak ProductName, ProductCode lub Feature name, ponieważ ściśle łączyłoby to moduł scalający z konkretnym produktem, a nie jest generycznym modułem wielokrotnego użytku. Takie działanie w zasadzie tworzy okólnik i nie jest pomysłem.

Prawdopodobnie potrzebujesz (trudno powiedzieć, nie znając więcej informacji), aby użyć stanu akcji jednego ze składników w module scalania dla swojego stanu.

Na przykład jeśli komponent1 ma plik1 i trzeba customaction1 do ognia, gdy ten składnik/plik jest instalowany wtedy by użyć określenia:

$ komponent1 = 3 // INSTALLSTATE_LOCAL

tamtędy jeśli ten moduł scalający zostanie scalony w Produkt 1, Produkt 2 lub Produkt 3 z Nazwą elementu A, B lub C, nie będzie to miało znaczenia, ponieważ powiązanie jest na poziomie komponentu.

Jeśli funkcja, z którą próbujesz powiązać, to inna funkcja, to wszystko musi zostać przeniesione do innego modułu scalającego, który zostanie scalony z tą funkcją. Może być konieczne utworzenie fałszywego komponentu do powiązania z.

Teraz, jeśli chcesz zignorować całą tę radę, spójrz na operatora stanu operacji Feature i ciasno paruj.

Conditional Statement Syntax

1

To brzmi jak robaka. Powinieneś przynajmniej otrzymać bardziej opisowy komunikat o błędzie wyjaśniający, co poszło nie tak. Zapraszam do pliku bug na http://wixtoolset.org/bugs

5

Trzeba zdefiniować węzeł Konfiguracja ramach modułu:

<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>