Assuming I remember all this correctly, then:
Your questions:
1. all files are removed before any new files are copied
2. so no version comparison is done - the REINSTALLMODE flags are irrelevant
3. so even files with Component/@NeverOverwite are newly installed (because any
existing file was removed)
4. this way I can do consistent downgrades (all components are downgraded to
the packaged version)
5. on repair, the @NeverOverwite files are safely left alone?
And:
If RemoveExistingProducts is after InstallFinalize:
1) No.
2) REINSTALLMODE is not used during an upgrade, but version comparison is
used to determine if incoming files should replace existing ones. This is what
makes it efficient, not that I've ever seen any numbers about the supposed
improvement.
3) No because of 2).
4) No.
5) Not sure what you're getting at. After the upgrade a repair puts back
what's supposed to be there as a result of the upgrade.
There can also be some gotchas with component guids because component ref
counting is used to figure out what to ref count down after the incoming
install has been done (potentially) all over the existing one, files and all.
I tend to be paranoid about REP after InstallFinalize because of rollback. If
you install the new product and then the REP uninstall of the previous one
(outside the transaction) fails then it will rollback and leave both old and
new products on the system.
If RemoveExistingProducts is immediately after InstallInitialize then:
1) Yes.
2) Yes.
3) Yes.
4) If your REP always uninstalls existing products, yes.
5) Same as before.
Because all files are removed first then nobody cares what the incoming
component guids are (unless of course you are sharing some other way).
Phil Wilson
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Markus Kuehni
Sent: Tuesday, March 25, 2008 9:00 AM
To: wix-users@lists.sourceforge.net
Subject: [WiX-users] RemoveExistingProducts placement
Hi
On a related note to my previous post (rules on overwriting files), I wonder,
what exactly the effect of placing the <RemoveExistingProducts> is.
I'm doing major upgrades only. No shared components.
In order to make the upgrade as efficient as possible, I currently use
<RemoveExistingProducts After="InstallFinalize" />
or
<RemoveExistingProducts Before="InstallFinalize" />
in order to make it into one transaction (all or nothing).
See
http://msdn2.microsoft.com/en-us/library/aa371197(VS.85).aspx
Now I wonder if I should actually use
<RemoveExistingProducts After="InstallInitialize" />
Using this sequence, is it true that
1. all files are removed before any new files are copied
2. so no version comparison is done - the REINSTALLMODE flags are irrelevant
3. so even files with Component/@NeverOverwite are newly installed (because any
existing file was removed)
4. this way I can do consistent downgrades (all components are downgraded to
the packaged version)
5. on repair, the @NeverOverwite files are safely left alone?
this would be exactly the way I'd like it to be!
Maybe
6. this is less efficient when a lot of files stay the same (because all these
files are first deleted, then re-copied)
but that's ok.
Thanks for all help an reassurance,
_Mark
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users