OK, this seems to be a MSI bug, because after investigating I noticed that:

1) by opening the created MSI with Orca I can see in the Component table:
removeFile    {F82061CB-27F9-41F5-B5FE-2EDCA1F1A8F9}    
INSTALLLOCATION    0    (REMOVE=ALL) AND (NOT UPGRADINGPRODUCTCODE)

2) The, after an update, in the log file I can see:

Ln 448
MSI (s) (44:40) [11:03:35:733]: Command Line: 
UPGRADINGPRODUCTCODE={BD36EB78-4DDE-4567-A300-DC497B51F5F5} 
CLIENTUILEVEL=0 REMOVE=ALL

Ln 717
MSI (s) (44:40) [11:03:36:184]: Executing op: 
FileRemove(,FileName=momo.txt,,)

So, even thoug in the MSI the component is correctly written with it's 
condition and even though one can see in the log that 
UPGRADINGPRODUCTCODE is set, still later in the log one can see that  
the component is executed, so I would say this is a MSI problem.

MeCoco

On 11/26/2010 10:00 AM, MeCoco wrote:
> Hi all,
>
> After searching any possible explanation on the internet, and after
> trying any possible combination of conditions, I got to the conclusion
> that this is either a bug or a limitation of Wix/MSI, because there is
> no condition that could distinguish between an uninstall (from
> add/remove programs) and an update, when REP is after InstallInitialize,
> eg<RemoveExistingProducts After="InstallInitialize"/>.
>
> I'm not sure if I should report this somewhere or not, but I will post
> again my sample here, as this sample proves this bug/limitation.
> In order to distinguish between an uninstall (from control panel) and an
> update, I used any possible combination of:
> Installed, REMOVE="ALL", OLDAPPFOUND and UPGRADINGPRODUCTCODE without
> success.
>
> I created a small sample file that shows exactly this problem, pls see
> below. The problem can be easily duplicated by doing:
> 1) build the below sample into a project with version 1.0.0
> 2) build the same sample but with another version 1.0.1 (change the
> version in CurrentVersion)
> 3) run version 1.0.0 =>  the product will be installed
> 4) In C:\Program Files\MySmallProject add a dummy file: momo.txt (think
> of it as a log file generated by running the application)
> 5) run the second version 101, which _updates_ the product
>
> =>  after the update the momo.txt is !!gone!! even though the component
> which removes the file is having the condition:
> (REMOVE=ALL) AND (NOT UPGRADINGPRODUCTCODE)
> which means that the file shouldn't have been removed during an update
> only during an uninstall.
>
> But if in the code instead of:
> <RemoveExistingProducts After="InstallInitialize"/>
>
> you have:
> <RemoveExistingProducts After="InstallFinalize"/>
>
> by doing all the above steps the momo.txt is _not_ deleted during an
> update, only during a real uninstall (from add/remove programs), which
> is the _desired_ behavior.
>
> So, it seems that when having<RemoveExistingProducts
> After="InstallInitialize"/>  there is no way to distinguish between an
> uninstall and an update.
>
> The code that proves the above described behaviour:
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <?define UpgradeCode = "61608F07-C47C-459F-97DD-CD02D104294C"?>
> <?define CurrentVersion = "1.0.0"?>
>
> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi";>
> <Product Id="*" Name="SmallProject" Language="1033"
> Version="$(var.CurrentVersion)" Manufacturer="SmallProject"
> UpgradeCode="$(var.UpgradeCode)">
> <Package Id="*" InstallerVersion="200" Compressed="yes" />
>
> <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
>
> <Directory Id="TARGETDIR" Name="SourceDir">
> <Directory Id="ProgramFilesFolder">
> <Directory Id="INSTALLLOCATION" Name="MySmallProject">
>
> <Component Id="mytest.txt" Guid="7CED77A9-597B-456A-BEF7-44C094800A06">
> <File Id="mytest.txt" Source="mytest.txt" KeyPath="yes" />
> </Component>
>
> <Component Id="removeFile" Guid="F82061CB-27F9-41F5-B5FE-2EDCA1F1A8F9">
> <RemoveFile Id="remove" Name="momo.txt" On="uninstall"/>
> <Condition>(REMOVE=ALL) AND (NOT UPGRADINGPRODUCTCODE)</Condition>
> </Component>
>
> </Directory>
> </Directory>
> </Directory>
>
> <Feature Id="ProductFeature" Title="SmallProject" Level="1">
> <ComponentRef Id="mytest.txt"/>
> <ComponentRef Id="removeFile"/>
> </Feature>
>
> <Upgrade Id="$(var.UpgradeCode)">
> <UpgradeVersion OnlyDetect="no" Property="OLDAPPFOUND" Minimum="0.0.1"
> IncludeMinimum="yes" Maximum="$(var.CurrentVersion)" IncludeMaximum="no" />
> <UpgradeVersion OnlyDetect="yes" Property="NEWAPPFOUND"
> Minimum="$(var.CurrentVersion)" IncludeMinimum="no" />
> <UpgradeVersion OnlyDetect="yes" Property="SELFFOUND"
> Minimum="$(var.CurrentVersion)" IncludeMinimum="yes"
> Maximum="$(var.CurrentVersion)" IncludeMaximum="yes" />
> </Upgrade>
>
> <CustomAction Id="NewerVersionDetected" Error="2000"/>
> <CustomAction Id="CurrentVersionDetected" Error="2001"/>
>
> <UI>  <Error Id="2000">!(loc.Error2000)</Error>  </UI>
> <UI>  <Error Id="2001">!(loc.Error2001)</Error>  </UI>
>
> <InstallExecuteSequence>
> <FindRelatedProducts Sequence="100" />
> <AppSearch After="FindRelatedProducts"/>
> <LaunchConditions After="AppSearch" />
> <Custom Action="NewerVersionDetected" After="AppSearch">NEWAPPFOUND</Custom>
> <Custom Action="CurrentVersionDetected" After="AppSearch">SELFFOUND</Custom>
> <RemoveExistingProducts After="InstallInitialize"/>
> <!--<RemoveExistingProducts After="InstallFinalize"/>-->
> </InstallExecuteSequence>
>
> <!-- Find previous installation directory -->
> <Property Id="INSTALLDIR">
> <RegistrySearch Id="FindInstallLocation" Root="HKLM"
> Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[OLDAPPFOUND]"
> Name="InstallLocation" Type="raw" />
> </Property>
>
> <CustomAction Id="SetARPINSTALLLOCATION" Property="ARPINSTALLLOCATION"
> Value="[INSTALLDIR]" />
> <InstallExecuteSequence>
> <Custom Action="SetARPINSTALLLOCATION" After="InstallValidate">NOT
> Installed</Custom>
> </InstallExecuteSequence>
>
> </Product>
> </Wix>
>
>
> Thank you,
> MeCoco
>
> ------------------------------------------------------------------------------
> Increase Visibility of Your 3D Game App&  Earn a Chance To Win $500!
> Tap into the largest installed PC base&  get more eyes on your game by
> optimizing for Intel(R) Graphics Technology. Get started today with the
> Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
> http://p.sf.net/sfu/intelisp-dev2dev
> _______________________________________________
> WiX-users mailing list
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users
>
>


------------------------------------------------------------------------------
Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
Tap into the largest installed PC base & get more eyes on your game by
optimizing for Intel(R) Graphics Technology. Get started today with the
Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
http://p.sf.net/sfu/intelisp-dev2dev
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to