Tried with latest 3.0.3907.0 and public released 3.0.2925.0
According to documentation on ResolveSource Element:
"Determines ...
The suggested way to do this is by using the Before or After attribute.
..."
However, when building a Module, this is not possible.
Anything other then a Sequence="xxx" value will produce an error in Light: "LGHT0175" which requires this standard action to have a sequence number.
As the target output is a MergeModule, the BaseAction I am using for this optional Standard Action is After="CostInitialize".
I could put a fixed sequence here, but that could produce a error when the Merge Module is consumed if the base action "CostInitialize" sequence value is greater then the sequence number defined for ResolveSource in the MergeModule.
It seems that the linker doesn't make a distinction between the ResolveSource standard action (which is optional), and any other standard actions (which are required).
Logged In: YES
user_id=26581
Originator: NO
Standard actions in a merge module must be explicitly sequenced. See the ModuleInstallExecuteSequence table doc for details.
Logged In: YES
user_id=2041979
Originator: YES
I had reviewed that document before submitting the bug. According to the SDK on the ModuleInstallExecuteSequence:
"When using standard actions in merge module sequence tables, the value in the Sequence column should be the recommended action sequence number. If the sequence number in the merge module differs from that for the same action in the .msi file sequence table, the merge tool uses the sequence number from the .msi file. See the suggested sequences in Using a Sequence Table for the recommended sequence numbers of standard actions."
However, there is no "suggested sequence" for "ResolveSource" (or for that matter, "InstallExecute" and "InstallExecuteAgain"). Yet ResolveSource does have a sequencing requirement - it must be scheduled between "CostInitialize" and "CostFinalize". Just like "InstallExecute" and "InstallExecuteAgain" must be scheduled between "InstallInitialize" and "InstallFinalize".
I believe this is why the WiX documentation on the ResolveSource Element here:
http://wix.sourceforge.net/manual-wix2/wix_xsd_resolvesource.htm
mentions:
"Determines the location of the source and sets the SourceDir property if the source has not been resolved yet. *Special actions don't have a built-in sequence number and thus must appear relative to another action.* The suggested way to do this is by using the Before or After attribute. InstallExecute and InstallExecuteAgain can optionally appear anywhere between InstallInitialize and InstallFinalize."
It all works wonderfully if I build these specific modules using other authoring tools (ORCA or Installshield), when the modules are Merged with a parent MSI, the ResolveSource action is scheduled where it needs to go (right after CostInitalize, or right before CostFinalize), even if the base action sequence number is changed.
Yet this is not possible in WiX due to the aforementioned LGHT0175 Linker Error.
Am I still missing something? Or should their be an exception added to avoid the sequencing check for the standard action "ResolveSource" (and it looks like "InstallExecute", and "InstallExecuteAgain" might have the same problem)?
Logged In: YES
user_id=26581
Originator: NO
Several standard actions don't have recommended sequences. But they're still standard actions, so the restriction in the ModuleInstallExecuteSequence trumps their specialness. A merge module that doesn't explicitly sequence ResolveSource fails validation:
ICEM12: Standard actions should not use the BaseAction and After fields in Module Sequence tables. The standard action
ResolveSourcehas a values entered in the BaseAction or After fields of the ModuleInstallExecuteSequence table.ICEM12: Standard actions must have a entry in the Sequence field of Module Sequence tables. The standard action
ResolveSourcedoes not have a Sequence value in the ModuleInstallExecuteSequence table.Logged In: YES
user_id=2041979
Originator: YES
Ok, makes sense... althought outside the realm of WiX, this looks like something that could cause problems for lax MSI developers, which could be avoided by allowing relative sequencing for these special standard actions.
I was concerned that if I create a MergeModule which explicitly sets the Sequence of the ResolveSource action, say, to "850". According to the MSI SDK, ResolveSource must be sequenced after "CostInitalized". The "suggested sequence" for CostInitalize in the InstallExecuteSequence is "800". (Next in line, is "FileCost", which is recommended to "900")
However, if another setup developer or a sysadmin consumes my Merge Module in their installation project, and they used a weird authoring tool (such as Installshield), which can dice up the sequence table values if one moves a lot of actions around, it is concievable that CostInitialize could be set to a value higher then "850". If this happens, the developer whom consumes my MergeModule would now have issues (and probably blame me!). This would be avoided by using the relative sequencing. However, I see that the module will fail validation, which also is not desirable.
On my end, it looks like I had an old MergeModule.cub file (actually from a copy of Installshield DevStudio9) which wasn't showing the ICEM12 Validation error noted. I re-validated the same MergeModule with the MSI 4.0 SDK version of MergeModule.cub, which shows the ICEM12 error you noted.
Many thanks for the clarification, I'll use "850" for my ResolveSource sequence, and cross my fingers! :-)
Cheers,
JB
Logged In: YES
user_id=26581
Originator: NO
You should be OK in that case, at least according to the doc:
If the sequence number in the merge module differs from that for the same action in the .msi file sequence table, the merge tool uses the sequence number from the .msi file.
You might ask why you have to specify the sequence number of mergemod.dll will ignore it. Yeah, that's a good question.<g></g>