Issue Description
Recently we used XmlConfig
to modify our web site tag in ApplicationHost.config to add AdvancedLogging settings. But we failed with an installation error saying the required XML node did not exist. Our WIX version is v3.7.
Analysis
After some time of investigation, we found the root cause. WIX uses a deferred CA (Custom Action) - ConfigureIIs to create and configure web site related items on IIS. And it uses another CA - SchedXmlConfig to work for XmlConfig
. SchedXmlConfig is a immediate CA. It schedules another two deferred CA - ExecXmlConfig and ExecXmlConfigRollback to do the real work for XmlConfig
. However, SchedXmlConfig is before ConfigureIIs in InstallExecuteSequence
and it always schedules ExecXmlConfig and ExecXmlConfigRollback to be before ConfigureIIs too. Therefore, WIX tried to modify ApplicationHost.config before our web site is created. Certainly it could not find our site node.
Solution
We noticed that SchedXmlConfig always schedules ExecXmlConfig and ExecXmlConfigRollback after itself. So the solution is to make SchedXmlConfig execute after ConfigureIIs.
We could use Orca.exe to directly modify MSI directly. But a better solution is to use the <Custom>
tag as the below:
<InstallExecuteSequence>
<Custom Action="SchedXmlConfig" After="ConfigureIIs"/>
</InstallExecuteSequence>
In fact, this method can be used to reschedule any WIX predefined CA.
Sample Code
The sample code contains a WIX setup project to deploy a simple web site on IIS and modify ApplicationHost.config to set the log file rollover option to Weekly.