Absolutely; handling rollback scenarios can increase the complexity
surrounding file removal several-fold.

(But when there aren't specific timing requirements, you just run such
a delete from the commit phase.)

Given that there is no clear way to know the future upgrade paths
(does anyone ever pre-create a big batch of future ProductCode
GUIDs?), it's a case where you're potentially doing the wrong thing
down the line no matter what you choose to do now.

On Tue, Nov 30, 2010 at 09:09, Rob Mensching <r...@robmensching.com> wrote:
> Getting the RemoveFile table entry right is *a lot* easier than getting
> rollback correct in all the cases it is required. The RemoveFoldersEx custom
> action does the same sort of work in the 
> http://wix-contrib.codeplex.comproject.
>
> On Mon, Nov 29, 2010 at 7:02 AM, Michael Urman <mur...@gmail.com> wrote:
>
>> The trick here is that in the working case, the component is never
>> uninstalled. With REP after InstallFinalize, the new install
>> increments the component's reference count, possibly installing
>> updated contents. Then REP uninstalls the earlier version, which
>> merely decrements this component's reference count. You can verify
>> this by examining the differences in the verbose logs for each
>> scenario.
>>
>> If you want to find an "approved" way to handle this, perhaps you
>> should consider the approach in Bob's Semi-custom actions article
>> (http://www.joyofsetup.com/2007/07/01/semi-custom-actions/) by
>> conditionally writing to the remove file table. I'm personally torn as
>> to how great an idea it is, because the difficulty of getting the
>> RemoveFile table entry correct is nearly as difficult as getting a
>> file removal correct.
>>
>> However one last comment: this whole approach has problems. If you
>> ever use an Upgrade table entry to remove this product from from a new
>> unrelated product, it will then likely leave this file behind when it
>> should not. A pity there's no great way to handle such scenarios.
>>
>> On Mon, Nov 29, 2010 at 08:36, MeCoco <vcotirl...@hotmail.com> wrote:
>> > Hi Michael,
>> >
>> > Thanks for your answer.
>> >
>> >  > Because of this, the premise that a component condition can prevent
>> > the RemoveFile table entry from executing during uninstall is flawed,
>> >
>> > I wouldn't have expected that, because of:
>> >
>> > 1) The code works as expected when I have REP after installFinalize,
>> > meaning the file is deleted only when uninstall, not also update. Why is
>> > then the code working as I was expecting when REP is after
>> > InstallFinalize? In that case the file should have also been removed as
>> > part of the component-uninstall right?
>> >
>> > 2) I was sure, one can accomplish my requirement (delete a file created
>> > by my application only when uninstall, not updates and REP is after
>> > InstallInitialize) with component conditions.
>> >
>> > If I can't accomplish that with component conditions, I have to use some
>> > CustomActions like a batch file or so, which is never recommended
>> > because they can't be rolled-back.
>> > I kept reading all around on the forum stuff like:
>> > "But as Brian pointed out before, you should not use batch files. If
>> > you're writing registry values or copying files, use native authoring
>> > which is
>> > transacted. Batch files are not transactional in nature. You'd need a
>> > separate batch file scheduled before your deferred CA executed as a
>> > rollback CA. But what about when your product is repaired or patched?
>> > What then? Conditions become difficult. Keeping standard or even custom
>> > data dependent
>> > on component install and action states helps avoid most of these issues.
>> "
>> > this is why I tried doing this with component conditions.
>> >
>> > That means there is no "approved" way of accomplishing this??? I
>> > wouldn't consider this being a so weird task: just deleting, when
>> > uninstalling, some files your app created and needs. I would have
>> > expected a standard way of doing this, and not through batch or other
>> > external custom actions as they can't be controlled during rollbacks.
>> >
>> > And still, why does this work when REP is after InstallFinalize?
>> >
>> > Thank you,
>> > MeCoco
>> >
>> >
>> > On 11/26/2010 1:57 PM, Michael Urman wrote:
>> >> Good job isolating it, but it's a problem understanding how component
>> >> conditions work. They only serve to gate when a component is
>> >> installed. With the transitive bit set, their going false can also
>> >> cause them to be uninstalled in a minor upgrade or other maintenance
>> >> scenario. However their being false will never prevent their
>> >> uninstallation.
>> >>
>> >> Because of this, the premise that a component condition can prevent
>> >> the RemoveFile table entry from executing during uninstall is flawed,
>> >> and you will need to find an alternate approach. Either it needs to be
>> >> tied to a component that is not removed, or possibly you will need to
>> >> use a custom action whose execution you can correctly condition (e.g.
>> >> something referring to the combination of component install and action
>> >> states as well as the presence of UPGRADINGPRODUCTCODE).
>> >>
>> >> On Fri, Nov 26, 2010 at 04:48, MeCoco<vcotirl...@hotmail.com>  wrote:
>> >>> 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
>> >>>
>> >>
>> ------------------------------------------------------------------------------
>> >> 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
>> >
>>
>>
>> ------------------------------------------------------------------------------
>> 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
>>
>
>
>
> --
> virtually, Rob Mensching - http://RobMensching.com LLC
> ------------------------------------------------------------------------------
> 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