2016-04-19 9 views
0

Ich habe andere Beiträge gesehen, die beschreiben, dass Komponentenbedingungen basierend auf dem Funktionszustand nicht ausgewertet werden, aber meine Frage ist viel einfacher.Wix-Komponentenbedingungen funktionieren nicht wie erwartet

Angesichts der folgenden:

<Property Id="WORDISINSTALLED" Secure="yes"> 
    <RegistrySearch Id="FindWordIsInstalled" Root="HKCR" Key="Word.Application" Type="raw" Win64="$(var.Win64)"/> 
</Property> 

<Property Id="WORDVERSION" Secure="yes"> 
    <RegistrySearch Id="WordVersion" Root="HKCR" Key="Word.Application\CurVer" Type="raw"/> 
</Property> 

<SetProperty Id="MIN_WORD_VERSION_INSTALLED" After ="AppSearch" Value="1"> 
    <![CDATA[WORDVERSION <> "Word.Application.11" AND WORDVERSION <> "Word.Application.12" AND WORDISINSTALLED]]> 
</SetProperty> 

Ich hätte dies tun können:

<Component Id="$(var.SOFFWordAddinReg_Id)" DiskId="1" Guid="$(var.SOFFWordAddinReg_Guid)" Win64="$(var.Win64)"> 
    <Condition>MIN_WORD_VERSION_INSTALLED</Condition> 
     <RegistryValue Root="HKLM" Key="Software\Microsoft\Office\Word\AddIns" Name="Description" Value="yada" Type="string" Action="write"/> 
    </Component> 

Mit der Erwartung, dass Komponente var.SOFFWordAddinReg_Id nur installiert werden, wenn MIN_WORD_VERSION_INSTALLED nicht null ist und TRUE .

Ich sehe aus den Protokollen, die WORDISINSTALLED zu "Microsoft Word-Anwendung" gesetzt ist und WORDVERSION wird auf "Word.Application.14" (in AppSearch), aber MIN_WORD_VERSION_INSTALLED nicht gesetzt:

Skipping Aktion: SetMIN_WORD_VERSION_INSTALLED .FA651678_2CA2_423F_9FE0_FE10237B33F6 (Bedingung falsch)

die Protokolle auch die Komponente Komponente zeigen: SOFFWordAddinReg.7D199B30_06E3_488C_9EDF_4B8188026E9C; Installiert: Abwesend; Anfrage: Lokal; Aktion: Null; Client-Status: Unbekannt

aber sagen Sie nicht warum. (Ich vermute wegen der Bedingung?)

Ich muss etwas tun sehr einfach falsch. Jede Hilfe sehr geschätzt.

Antwort

0

Boolesche Ausdrücke sollten Parens verwenden, da die Priorität der booleschen Operatoren < = Vergleichsoperatoren ist, z. sein sollte:

"Word.Application.11") und (WORDVERSION <> "Word.Application.12") und (WORDISINSTALLED)]]>

Verwandte Themen