[wix-users] Condition question - "Installed"

Joel Budreau joel.budreau at gmail.com
Wed Oct 11 12:51:36 PDT 2017


- I’d drop “Installed OR”. It doesn’t affect a fresh install, but if you later run a repair or modify you might run into problems where both of these features evaluate to true.
- You don’t need to set KeyPath=“no” (“no” is the default value)
- Win64=“yes” is fine
- You only need to set Transitive=“yes” if the component has a condition that you would want re-evaluated during a repair. So, no component condition -> drop Transitive attribute (default is “no”).

- Joel

> On Oct 11, 2017, at 10:00 AM, Walter Dexter via wix-users <wix-users at lists.wixtoolset.org> wrote:
> 
> Hi-
> 
> I have an installer that installs either one set of files or the other set
> of files depending on a registry value.
> 
> This seems like it's working, but I'm not sure if I should be including
> "Installed OR" in my condition. In my limited testing it doesn't seem like
> it matters, but maybe I'm missing something. WiX source snips are below.
> 
> Notes:
> 
>   - This MSI is for internal use only, installing only on Server 2003
>   (32-bit) or Server 2012 (64-bit.)
>   - HKLM\SOFTWARE\a\b\c\d is a REG_SZ that will always contain 6.2 digits.
>   - Server 2003 platforms will never have a value that satisfies the
>   Feature2 condition.
>   - The components within the ComponentGroups all have versioned files as
>   their KeyPath (A DLL with version resource.)
>   - The non-KeyPath files within the components land in the same location
>   from both ComponentGroups.
>      - "CGOne" installs copies of "one.dll" and "a.ini" to three different
>      directories.
>      - "CGTwo" installs  "two.dll" and "a.ini" to the same three
>      directories.
>   - It is likely that an older version of the same MSI (same UpgradeCode,
>   different ProductCode) will already have been installed on the target
>   system, along with files "old.dll" and "a.ini" already present in the same
>   three directories.
>   - Please excuse any typos; I re-keyed, simplified and anonymized the
>   following XML. My employer prefers that we remain semi-anonymous.
> 
> <Property Id="VALUE" Secure="yes">
>  <RegistrySearch Id="RS_VALUE" Root="HKLM" Key="SOFTWARE\a\b\c" Name="d"
> Type="raw" Win64="yes" />
> </Property>
> 
> <Feature Id="Feature1" Title="Files for Less" Level="0">
>    <ComponentGroupRef Id="CGOne" />
>    <Condition Level="1"><![CDATA[Installed OR VALUE < "120000.00"
> ]]></Condition>
> </Feature>
> 
> <Feature Id="Feature2" Title="Files for More" Level="0">
>    <ComponentGroupRef Id="CGTwo" />
>    <Condition Level="1"><![CDATA[Installed OR VALUE >= "120000.00"
> ]]></Condition>
> </Feature>
> 
> <ComponentGroup Id="CGOne">
>    <Component Id="CG1a" Guid="...." Directory="DIR_COPYA" Transitive="yes"
>> 
>        <File Id="CG1aDLL" Source="one.dll" KeyPath="yes" />
>        <File Id="CG1aINI" Source="a.ini" KeyPath="no" />
>    </Component>
>    <Component Id="CG1b" Guid="...." Directory="DIR_COPYB" Transitive="yes"
>> 
>        <File Id="CG1bDLL" Source="one.dll" KeyPath="yes" />
>        <File Id="CG1bINI" Source="a.ini" KeyPath="no" />
>    </Component>
>    <Component Id="CG1c" Guid="...." Directory="DIR_COPYC" Transitive="yes"
>> 
>        <File Id="CG1cDLL" Source="one.dll" KeyPath="yes" />
>        <File Id="CG1cINI" Source="a.ini" KeyPath="no" />
>    </Component>
> </ComponentGroup>
> 
> <ComponentGroup Id="CGTwo">
>    <Component Id="CG2a" Guid="...." Directory="DIR_COPYA" Transitive="yes"
>> 
>        <File Id="CG2aDLL" Source="two.dll" KeyPath="yes" />
>        <File Id="CG2aINI" Source="a.ini" KeyPath="no" />
>    </Component>
>    <Component Id="CG2b" Guid="...." Directory="DIR_COPYB" Transitive="yes"
>> 
>        <File Id="CG2bDLL" Source="two.dll" KeyPath="yes" />
>        <File Id="CG2bINI" Source="a.ini" KeyPath="no" />
>    </Component>
>    <Component Id="CG2c" Guid="...." Directory="DIR_COPYC" Transitive="yes"
>> 
>        <File Id="CG2cDLL" Source="two.dll" KeyPath="yes" />
>        <File Id="CG2cINI" Source="a.ini" KeyPath="no" />
>    </Component>
> </ComponentGroup>
> 
> So what do you guys think - "Installed" needed, or better without it? Why?
> 
> Any other feedback? I was uncomfortable with the "Win64=yes" but based on
> logs it's reading the registry key successfully on the 32-bit platform.
> 
> I'm also not quite sure if the "Transitive" is gaining me anything.
> 
> Thanks!
> 
> Walt
> 
> ____________________________________________________________________
> WiX Toolset Users Mailing List provided by FireGiant http://www.firegiant.com/



More information about the wix-users mailing list