6 Stimmen

Wie verwendet man konfigurierbare Merge-Module in Wix?

AFAIK wird das so gehandhabt:

Produkt:

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

Modul verschmelzen:

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

Aber wenn ich es wie oben gemacht habe, bekomme ich einen Fehler: Es wurde ein unerwarteter Merge-Fehler vom Typ 'msmErrorDataRequestFailed' festgestellt, für den es derzeit keine Fehlermeldung gibt, die angezeigt werden kann.

Kann mir jemand sagen, wie man dieses Problem lösen kann? Im Grunde möchte ich eine benutzerdefinierte Aktion im Zusammenführungsmodul nur dann ausführen, wenn ein bestimmtes Merkmal ausgewählt ist Ist das der richtige Weg? Danke Daniel

5voto

Sergey Voitsekh Punkte 51

Sie müssen den Knoten Konfiguration unter Modul definieren:

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

1voto

Rob Mensching Punkte 31828

Das klingt nach einem Fehler. Sie sollten zumindest eine aussagekräftige Fehlermeldung erhalten, die erklärt, was schief gelaufen ist. Sie können den Fehler unter http://wixtoolset.org/bugs

0voto

Christopher Painter Punkte 53414

Ein Feature ist von einem Merge-Modul abhängig, nicht umgekehrt. Nichts im Zusammenführungsmodul sollte einen Verweis auf etwas außerhalb des Zusammenführungsmoduls haben, wie z. B. einen Produktnamen, einen Produktcode oder einen Feature-Namen, da dies das Zusammenführungsmodul eng an ein bestimmtes Produkt koppeln würde, anstatt ein generisches, wiederverwendbares Modul zu sein. Dies würde im Wesentlichen eine zirkuläre Referenz erzeugen und ist nicht sinnvoll.

Was Sie wahrscheinlich brauchen (schwer zu sagen, ohne mehr Informationen zu kennen), ist die Verwendung des Aktionsstatus einer der Komponenten im Merge-Modul für Ihre Bedingung.

Wenn Komponente1 beispielsweise Datei1 hat und Sie wollen, dass customaction1 ausgelöst wird, wenn diese Komponente/Datei installiert wird, dann würden Sie einen Ausdruck von verwenden:

$component1=3 //INSTALLSTATE_LOCAL

Auf diese Weise spielt es keine Rolle, ob dieses Zusammenführungsmodul in Produkt 1, Produkt 2 oder Produkt 3 mit dem Merkmalsnamen A, B oder C zusammengeführt wird, da die Zuordnung auf Komponentenebene erfolgt.

Wenn das Feature, an das Sie anknüpfen wollen, ein anderes Feature ist, dann muss das alles in ein anderes Merge-Modul verschoben werden, das mit diesem Feature zusammengeführt wird. Möglicherweise müssen Sie eine Dummy-Komponente erstellen, die Sie damit verknüpfen.

Wenn Sie nun all diese Ratschläge ignorieren wollen, dann schauen Sie sich den Feature-Action-State-Operator an und koppeln Sie sich eng an.

Syntax der bedingten Anweisung

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X