
Hi again,
still stumbling on with that patching horror...
My current problem:
I have finally managed to create an patch/upgrade for our software
(using DevStudio9). Now I ran into the following problem:
When I package my 'ServicePack' (which is a major upgrade) into an 'Update.exe', nothing gets installed. There's no error, simply nothing is updated.
I have noticed that when I pass parameters to Update.exe via /v
(like /v"/l*v c:\Temp\bla.lo"), everything works out just fine.
After a LOT of investigation I finally found out that this results from the fact that Update.exe by default sets 'REINSTALL=ALL' when calling the contained patch installer and thus the Property 'Preselected' is set to 1 which prevents the action 'MigrateFeatureStates' from working. If a parameter is passed, this behaviour seems to be suppressed and only the given parameters are passed on, so 'Preselected' is only true, when REINSTALL, ADDLOCAL, etc. are explicitly set in this parameter(see MSI help on 'Preselected property').
So far this is not THAT new, I know, but how can I work around this? I haven't found a solution, is there any?
Resetting 'REINSTALL' by custom action has the result that EVERYTHING gets installed, but I only want to update those features that are already installed.
The only way I have seen is to not create an 'Update.exe' and just create the *.msp patch.
But that is not really good, since I have to call some Installscript action, that means I must add the Installscript-Engine Installer. But I just want to have a single, simple executable that I can deliver to our customers, he starts it, update runs and that's it.
Is there any way to reset the 'Preselected' property? I know it's private but is there really no way? Or can I work around this any other way?
Thanks for any help,
Regards, Jörg