[wix-users] Component IDs for Major Upgrade

Edwin Castro egcastr at gmail.com
Fri Dec 8 14:29:20 PST 2017


http://wixtoolset.org/documentation/manual/v3/xsd/wix/majorupgrade.html

If you want to uninstall the old product before installing the updated
product, then Schedule="afterInstallInitialize".

If you want to update to the new product first and then remove unnecessary
pieces from the old product, then Schedule="afterInstallExecute" or
Schedule="afterInstallExecuteAgain".

https://msdn.microsoft.com/en-us/library/windows/desktop/aa369497.aspx says

"Two actions exist that do the same thing, InstallExecute and
InstallExecuteAgain, for cases where the functionality of InstallExecute is
needed twice in the InstallExecuteSequence table."

I expect you don't need InstallExecute twice so you should probably prefer
Schedule="afterInstallExecute" over Schedule="afterInstallExecuteAgain".

You said, "strange issue that, during the Upgrade, even if a service exe
has not changed at all, the upgrade process is uninstalling  / removing and
reinstalling it." Did the fileversion of the service exe change? If it did,
then the component that installs the service exe changed and will be
upgraded.

I expect if you use Schedule="afterInstallInitialize" then you will see the
old service stopping, the old service registration removed, the old service
exe removed, the updated service exe copied, the updated service
registration created, the updated service started.

I assume if you use Schedule="afterInstallExecute" then you will see the
service stopping, the service exe copied, the service registration updated,
the service started. But I don't actually use
Schedule="afterInstallExecute" so I might actually be wrong about that
sequence.

When the service starts/stops is also controlled by ServiceControl. See
http://wixtoolset.org/documentation/manual/v3/xsd/wix/servicecontrol.html
for details.

--
Edwin G. Castro

On Fri, Dec 8, 2017 at 10:13 AM, Ven H <venh.123 at gmail.com> wrote:

> Thank you Edwin. So, what do you recommend. When should I schedule the
> RemoveExistingProducts, if not afterInstallFinalize. Please advise. Also, I
> tried this because of a strange issue that, during the Upgrade, even if a
> service exe has not changed at all, the upgrade process is uninstalling  /
> removing and reinstalling it. I tried many things but nothing seems to be
> working. Also, could you please provide a link to the documentation from
> which you have quoted the point above?
>
> Regards,
> Venkatesh
>
> On Thu, Dec 7, 2017 at 11:50 PM, Edwin Castro <egcastr at gmail.com> wrote:
>
>> You should definitely *not* change component GUIDs if the component has
>> not changed.
>>
>> I would discourage you from scheduling RemoveExistingProducts
>> afterInstallFinalize. To quote from the documentation:
>>
>> "Schedules RemoveExistingProducts after the InstallFinalize standard
>> action. This is similar to the afterInstallExecute and
>> afterInstallExecuteAgain schedulings but takes place outside the
>> installation transaction so if installation of the upgrade product fails,
>> Windows Installer does not roll back the removal of the installed product,
>> so the machine will have both versions installed."
>>
>> Any scheduling that happens outside the installation transaction is bad
>> for users when failures occur and will create a negative impression of the
>> product and company responsible for that product.
>>
>> --
>> Edwin G. Castro
>>
>> On Thu, Dec 7, 2017 at 9:47 AM, Ven H <venh.123 at gmail.com> wrote:
>>
>>> Thanks a lot for your response Edwin. In my case, only my file (content
>>> / version) changes and not key paths. Also, I am setting the Schedule
>>> attribute on the MajorUpgrade element to afterInstallFinalize. Hence, I
>>> believe I should not change the Component Guids. Right?
>>>
>>> Regards,
>>> Venkatesh
>>>
>>> On Thu, Dec 7, 2017 at 10:49 PM, Edwin Castro via wix-users <
>>> wix-users at lists.wixtoolset.org> wrote:
>>>
>>>> Note you *MUST* change the component GUID if the component changes in
>>>> any
>>>> way (including key path) with the exception of a file's version.
>>>>
>>>> If the component hasn't changed at all but the file's version changed,
>>>> then
>>>> the component GUID must not change if you schedule
>>>> RemoveExistingProducts
>>>> before InstallFinalize. This is required because Windows Installer will
>>>> reinstall the component first (including increasing ref counts) and then
>>>> uninstall components at the end (decreasing ref counts). If you change
>>>> anything about a component other than the file's version, then you are
>>>> breaking the component rules and upgrades will not work properly.
>>>>
>>>> If you schedule RemoveExistingProducts after InstallInitialize, then
>>>> your
>>>> old product is completely uninstalled before the new product is
>>>> installed.
>>>> In this case you don't have to be so strict with the component rules
>>>> because your ref counts never go up higher than 1. The downside of this
>>>> approach is that you completely uninstall the old product and that might
>>>> have effects you didn't expect like configuration and data files might
>>>> be
>>>> deleted and recreated.
>>>>
>>>> --
>>>> Edwin G. Castro
>>>>
>>>>
>>>>
>>>> On Wed, Dec 6, 2017 at 12:27 PM, Hoover, Jacob via wix-users <
>>>> wix-users at lists.wixtoolset.org> wrote:
>>>>
>>>> > Depends on when RemoveExistingProducts is scheduled and if the new
>>>> install
>>>> > has a component in the same key path but a different component id.
>>>> >
>>>> > Best rule of thumb is 1 file per component, and let WiX generate
>>>> stable
>>>> > GUID's (ala *).  This will cause any change in the key path to get a
>>>> new
>>>> > GUID.
>>>> >
>>>> > -----Original Message-----
>>>> > From: wix-users [mailto:wix-users-bounces at lists.wixtoolset.org] On
>>>> Behalf
>>>> > Of Paul Mumford via wix-users
>>>> > Sent: Wednesday, December 6, 2017 2:18 PM
>>>> > To: WiX Toolset Users Mailing List <wix-users at lists.wixtoolset.org>
>>>> > Cc: Paul Mumford <paul.mumford at gmail.com>
>>>> > Subject: Re: [wix-users] Component IDs for Major Upgrade
>>>> >
>>>> > Yeah think so, the only guid that needs changing is the package
>>>> (which I
>>>> > found easier to just use * to generate a new one) and change the major
>>>> > version. As long as you never change the upgrade guid. Someone confirm
>>>> > please because im no longer in that contract and cant see the source
>>>> code
>>>> > anymore. I did have that all written down in comments in the package
>>>> after
>>>> > r&d.
>>>> >
>>>> > On 6 December 2017 at 17:35, Ven H via wix-users <
>>>> > wix-users at lists.wixtoolset.org> wrote:
>>>> >
>>>> > > Do the component Guids need to be the same for Major upgrade?
>>>> > >
>>>> > > Regards,
>>>> > > Venkatesh
>>>> > >
>>>> > > ____________________________________________________________
>>>> ________
>>>> > > WiX Toolset Users Mailing List provided by FireGiant
>>>> > > http://www.firegiant.com/
>>>> > >
>>>> >
>>>> > ____________________________________________________________________
>>>> > WiX Toolset Users Mailing List provided by FireGiant
>>>> > http://www.firegiant.com/
>>>> >
>>>> > ____________________________________________________________________
>>>> > WiX Toolset Users Mailing List provided by FireGiant
>>>> > http://www.firegiant.com/
>>>> >
>>>>
>>>> ____________________________________________________________________
>>>> WiX Toolset Users Mailing List provided by FireGiant
>>>> http://www.firegiant.com/
>>>>
>>>
>>>
>>
>


More information about the wix-users mailing list