Everyone,
I have the following directory structure in an MSI I am trying to build:
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="HELPDIR" Name="HELP">
<!-- components here -->
</Directory>
<Directory Id="HELPDIR" Name="HELP">
<!-- components here -->
</Directory>
<Directory Id="APPDATADIR" Name=".">
<Directory Id="PARMDIR" Name="PARM">
<!-- components here -->
</Directory>
<Directory Id="XMLDIR" Name="XML">
<!-- components here -->
</Directory>
</Directory>
</Directory>
</Fragment>
Basically, I have a directory APPDATADIR whose parent is TARGETDIR;
underneath are two directories whose parent is APPDATADIR. I also have two
child directories under TARGETDIR as well. All of these directories have
components or merge modules below them. I am trying to use a custom action to
change the value of APPDATADIR based on a second property called SPLITBUILD.
This property can be changed via a dialog such that the child directories for
APPDATADIR are modified accordingly via propagation. I am doing this to give
the user a choice about the components under APPDATADIR, i.e., whether or not
to have the files/components under APPDATADIR installed under a different
directory than the TARGETDIR. The property SPLITBUILD is used in a radio
button group with two choices with values of "Yes" as default and "No" (too
lazy to write the code here but it does work). Based on the value of
SPLITBUILD, I am attempting to modify the APPDATADIR as follows:
<Fragment>
<CustomAction Id="DIRCA_APPDATADIR_NOSPLITBUILD" Property="APPDATADIR"
Value="[TARGETDIR]" Execute="immediate"/>
<CustomAction Id="DIRCA_APPDATADIR_SPLITBUILD" Property="APPDATADIR"
Value="[CommonAppDataFolder][FOLDERNAME]" Execute="immediate"/>
<InstallUISequence>
<Custom Action="DIRCA_APPDATADIR_NOSPLITBUILD" After="CostInitialize"
Overridable="yes">SPLITBUILD <> "Yes"</Custom>
<Custom Action="DIRCA_APPDATADIR_SPLITBUILD"
After="DIRCA_APPDATADIR_NOSPLITBUILD" Overridable="yes">SPLITBUILD =
"Yes"</Custom>
</InstallUISequence>
<InstallExecuteSequence>
<Custom Action="DIRCA_APPDATADIR_NOSPLITBUILD" After="CostInitialize"
Overridable="yes">SPLITBUILD <> "Yes"</Custom>
<Custom Action="DIRCA_APPDATADIR_SPLITBUILD"
After="DIRCA_APPDATADIR_NOSPLITBUILD" Overridable="yes">SPLITBUILD =
"Yes"</Custom>
</InstallExecuteSequence>
</Fragment>
What happens is the following from looking at my installer logs: Before
the user is given the SPLITBUILD option, APPDATADIR is set to
"[CommonAppDataFolder][FOLDERNAME]", i.e., C:\ProgramData\FOLDERNAME\ , because
SPLITBUILD is "Yes" by default . The directories PARMDIR and XMLDIR are
correctly set based on that value of APPDATADIR. The user is then shown the
radio button group to then modify SPLITBUILD. The user modifies the value of
SPLITBUILD to "No" and clicks Next and then eventually begins installing the
product. The value of APPDATADIR seems to be set to TARGETDIR from reading the
logs. However, the subdirectories under APPDATADIR are not recalculated based
on that change, i.e., the change does not propagate. I am trying to figure out
how to configure the custom action above to properly pass the value of
APPDATADIR such that PARMDIR and XMLDIR are modified based on the change.
I have also tried setting APPDATADIR directly though the ControlEvent
table instead of the custom actions above (clicking Next after changing
SPLITBUILD would modify APPDATADIR). However, the subdirectories were not
modified based on the parent directory change. I thought that moving the
custom action to after the CostInitialize action would help. Should I move it
after FileCost but before CostFinalize? I believe the standard event structure
would normally be CostInitialize -> FileCost -> CostFinalize. I moved the
custom action into that block as the installer logs shows the MSI doing
recalculations of all the directories. I have also tried changing the Execute=
attribute for the custom action as well, but the results have been mixed. I
feel that I am so close yet so far. Any feedback or assistance would be
appreciated. Thank you for your time.
David J. Antoine
Quality Assurance
ConvergEx Group | RealTick
[email protected]
This electronic mail message and any attached files contain information
intended for the exclusive use of the individual or entity to whom it is
addressed and may contain information that is proprietary, privileged,
confidential and/or exempt from disclosure under applicable law. If you are not
the intended recipient, you are hereby notified that any viewing, copying,
disclosure or distribution of this information may be subject to legal
restriction or sanction. Please notify the sender, by electronic mail or
telephone, of any unintended recipients and delete the original message without
making any copies.
------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb
_______________________________________________
WiX-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users