Hello,
I have WIX project for product, which needs updates periodically.
Also I block downgrade installations.
There is a dialog in WIX, which allows to select between per user/per
machine installation.
Uninstall previous installations is handled using "Upgrade" table:
> <Upgrade Id="$(var.UpgradeCode)">
> <UpgradeVersion Property="OLDAPPFOUND"
> Minimum="1.0.0.0" IncludeMinimum="yes"
> Maximum="$(var.version)" IncludeMaximum="no"
> OnlyDetect="no" />
> <UpgradeVersion Property="NEWAPPFOUND"
> Minimum="$(var.version)" IncludeMinimum="no"
> OnlyDetect="yes"/>
> </Upgrade>
Sequences:
> <AdminExecuteSequence />
>
> <InstallExecuteSequence>
> <FindRelatedProducts Before="LaunchConditions" /><!-- search for
> installed products using Upgrade table -->
> <RemoveExistingProducts After="InstallInitialize" /> <!-- remove
> products, found in FindRelatedProducts -->
> </InstallExecuteSequence>
>
> <InstallUISequence>
> <FindRelatedProducts Before="LaunchConditions" />
> </InstallUISequence>
To protect from downgrade I use <Condition> element in <Package>:
> <Condition
> Message='A later version of "[ProductName]" is already installed:
> {[NEWAPPFOUND]}. Setup will now exit.'
> >NOT NEWAPPFOUND</Condition>
So information, found in FindRelatedProducts, is used for 2 tasks:
- uninstall previously installed products in action RemoveExistingProducts
- block downgrade installations calculating condition of Package. As I
understand conditions validated in action LaunchConditions
So FindRelatedProducts must be executed before these 2 actions.
Also I have such properties (by default setup is per machine):
> <Property Id="ALLUSERS" Value="1" />
> <Property Id="ASSISTANCE_USERS">all</Property>
There is UI dialog, where user can change these properties to switch to
per-user install.
The problem happens when first product is installed per-user.
If upgrade installation is launched, FindRelatedProducts is launched
before UI dialog with selection per-user/per-machine. At this moment
ALLUSERS has its default value "1". So FindRelatedProducts suppose that
new installation will be per-machine (it is incorrect, because later
user can switch to per-user installation in UI dialog). So
FindRelatedProducts skips previous per-user installation with message in
install log:
> MSI (c) (4C:38) [09:58:38:093]: FindRelatedProducts: current install is
> per-machine. Related install for product '{OLD-PRODUCT-UID}' is per-user.
> Skipping...
Old product is not uninstalled and I have list of all versions of my
product in add/remove products Windows applet.
As I understand the reason of problem is that FindRelatedProducts
executed before UI dialog with selection between per-user/per-machine.
But I can not make FindRelatedProducts running after this dialog because
FindRelatedProducts results is also used by LaunchConditions, which must
run before UI dialogs.
How this problem must be solved? How to make FindRelatedProducts find
previous per-user installation?
--
Thanks!
------------------------------------------------------------------------------
Cloud Services Checklist: Pricing and Packaging Optimization
This white paper is intended to serve as a reference, checklist and point of
discussion for anyone considering optimizing the pricing and packaging model
of a cloud services business. Read Now!
http://www.accelacomm.com/jaw/sfnl/114/51491232/
_______________________________________________
WiX-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users