Blair,

Thank you for your reply.

Now I think I've got the clear notion of GAC and SxS, and
how I should schedule RemoveExistingProducts.

And it's okay with the product-level versioning issues.

As for the component rules and the versioning rules of files,
I'll check them out in "TAO of Windows Installer".

Nobuo Kihara

2010/1/9 Blair <os...@live.com>:
> Inline...
>
> -----Original Message-----
> From: Kihara Nobuo [mailto:soft...@gmail.com]
> Sent: Friday, January 08, 2010 6:43 PM
> To: General discussion for Windows Installer XML toolset.
> Subject: [WiX-users] Major Upgrade, RemoveExistingProducts, Downgrade
> Prevention and Component Guid
>
> Hi all,
>
> I'm new to WiX and Windows Installer, just having walked through the
> lessons of WiX Tutorial.
> Now I'm wondering how I should plan the upgrading of the product.
> These are my questions:
>
> 1) Am I right to say that generally the major upgrade would be the
> best solution for relatively small product?
> The alternative methods have many drawbacks either for the users or
> for the developer.
> The small update and the minor upgrade are not very user friendly just
> with a raw MSI, and we have to provide a bootstrapper that wraps it.
> The patch also requires much more costs from the developer.
> On the other hand the major upgrade can be used both a initial
> installer and a upgrading installer just with a single MSI without any
> additional costs.
> The only possible drawback of it might be the size of the package in
> comparison with a patch.
> Right?
>
> [Blair] Yes, you are right.
>
> 2) Where should I schedule RemoveExistingProducts?
> WiX tutorial doesn't include a sample source code for major upgrade,
> so I had to write my own. I noticed that I have to schedule
> RemoveExistingProducts in order to make a major upgrade package.
> According to the MSI SDK documentation, there are 4 possible positions
> in the sequence:
> (A) just before InstallInitialize,
> (B) just after InstallInitialize,
> (C) just before InstallFinalize, or
> (D) just after InstallFinalize.
> The documentation seems to recommend the last one for the sake of
> efficiency.
> But, Bob Arnson recommends (A) and (B) in his blog
> post(http://www.joyofsetup.com/2008/12/30/paying-for-upgrades/)
> because they are much safer, and they are fairly efficient if you have
> followed the component rules.
> But, then again, I've read an article in MSDN
> (http://support.microsoft.com/kb/905238/en-us/) that says the early
> scheduling of RemoveExistingProducts might make a problem with
> assembly in GAC or SxS. Although I really don't have a clear
> understanding what GAC and SxS mean, they look something I can get rid
> of a touch with. But I'm not sure.
> So, what should I do?
>
> [Blair] The GAC is the global repository of .NET assemblies. SxS is a
> mechanism for installing multiple versions of the same COM services. If you
> are building or will build code that others will use (which includes
> extending the Windows Explorer shell, the Internet Explorer program, or
> extend other programs such as by creating Office add-ins) or even if you are
> distributing a driver you will probably need to be concerned with the
> GAC/SxS scheduling issue(s) and will need to strongly consider C or D. If
> your program is stand-alone (you don't export any functionality to other
> programs) and you don't have to install any runtime (except for possibly
> requiring some version of the .NET runtime), and that situation is likely to
> continue for a long time, you are probably perfectly safe using A or B.
>
> 3) There exists a downgrade prevention mechanism in Windows Installer
> not in the product level but in the component or file level. I'm
> thinking about the switchs of REINSTALLMODE. I think it is sometimes
> very confusing, because it works irrelevant of the versioning rule of
> the product level.
> When you apply a minor upgrade package of 1.0.1 to the existing 1.0.0
> by the command line of "msiexec /i foo.msi REINSTALL=all
> REINSTALLMODE=vomus", it will work just fine. Just as you would have
> expected, foo.exe will be upgraded from 1.0.0 to 1.0.1. But after the
> upgrade, when you try to apply the wrong package of 1.0.0 to the
> existing 1.0.1 with the same command line, it will finish installation
> without any error or warning messages as if the downgrading has been
> completed without any problem. But in fact the foo.exe is protected by
> the "o" switch of REINSTALLMODE and will stay with the newer version
> of 1.0.1. It's true that I specified the "o" switch to prevent the
> downgrading, and the result must be the right one "by design", but I
> feel that it's still very confusing. All the more for the users who
> happened to have run the wrong package of minor upgrade from a
> bootstrapper where they were not responsible for the REINSTALLMODE
> switch. If you want to inform the users with some suitable messages
> regarding this downgrade prevention, you will have to provide some
> extra mechanism not in your MSI but in your bootstrapping wrapper.
> WiX tutorial suggests to use a "safety lock" using the Upgrade element
> to prevent the downgrade, but it doesn't work for this scenario,
> because FindRelatedProducts does nothing and returns immediately in
> the REINSTALL mode.
>
> Have I misunderstood something? Am I right?
>
> [Blair] For those using only "Major Upgrades", you can use the Upgrade table
> and either a LaunchCondition or an Error custom action to prevent
> product-level downgrades without having to deal with REINSTALLMODE or any
> related mess. I'll show the pattern in answer to your #4.
>
> But it's okay, I gave up using small updates and minor upgrades for
> myself. The questions are:
>
> 4) Does the same kind of downgrade prevention mechanism exist for
> major upgrade scenario?
>
> [Blair] The product-level downgrade scenario for those who always let WiX
> generate the ProductCode (who set Product\Id='*' in their authoring) is a
> pattern similar to this:
>
> ...
> <?define UpgradeCode="INSERT-UPGRADE-GUID-HERE"/>
> <Product Id='*' UpgradeCode='$(var.UpgradeCode)'...>
>  <Package .../>
>  <Upgrade Id='$(var.UpgradeCode)'>
>  <UpgradeVersion Maximum='$(var.Version)' Property='UPGRADEFROM'/>
>  <UpgradeVersion Minimum='$(var.Version)' Property='DOWNGRADEFROM'
> OnlyDetect='yes'/>
>  </Upgrade>
>  <Condition Message='Attempted to downgrade [ProductName]. Not
> allowed.'>DOWNGRADEFROM</Condition>
>  <InstallExecuteSequence>
>   <RemoveExistingProducts After='PICK-YOUR-LOCATION-FOR-THIS-ACTION'/>
>  </InstallExecuteSequence>
> </Product>
> ...
>
> 5) Does it consider the last modified date of the file when it has no
> version information?
> Or, do I have to protect the user configurable files that have been
> modified by the user after the installation, probably using a custom
> action considering the UPGRADINGPRODUCTCODE property as Gabor
> suggests?
>
> [Blair] This only applies to file/component-level up/down-grading concerns
> that minor upgrades and small updates are forced to use, not to
> product-version-level that major upgrades use.
>
> 6) And the last question is a vague one, because I don't have a clear
> understanding of the so-called "Component Rules". When should I change
> the GUID of a component? Am I supposed to change the GUID of the
> component when I add to or remove from a component of EXE file
> something like a shortcut? And what about the location of the file?
> Should it hold the same GUID if the file name remains the same? ...
> etc.
> Is there any good comprehensive explanation of it to refer to?
>
> [Blair] IMHO the best reference is the "TAO of Windows Installer". When I
> have a few more minutes I'll point you to other resources addressing the
> component rules as well. You can also search this list, entries by myself
> and several others address your direct questions.
>
> Nobuo Kihara
>
> ----------------------------------------------------------------------------
> --
> This SF.Net email is sponsored by the Verizon Developer Community
> Take advantage of Verizon's best-in-class app development support
> A streamlined, 14 day to market process makes app distribution fast and easy
> Join now and get one step closer to millions of Verizon customers
> http://p.sf.net/sfu/verizon-dev2dev
> _______________________________________________
> WiX-users mailing list
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users
>
>
> ------------------------------------------------------------------------------
> This SF.Net email is sponsored by the Verizon Developer Community
> Take advantage of Verizon's best-in-class app development support
> A streamlined, 14 day to market process makes app distribution fast and easy
> Join now and get one step closer to millions of Verizon customers
> http://p.sf.net/sfu/verizon-dev2dev
> _______________________________________________
> WiX-users mailing list
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users
>

------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to