Problem with MSI upgrades.... - Eric

25-Jan-07 04:02:44
We have two products.  One that we have had for quite a while, and a
second much newer one.  For each one of these, we build two iso images.
One that is demo-only (it will only accept an evaluation license key),
and the other which is live that will accept any type of key.   I have
things set up in the upgrade table such that the live version will
upgrade the demo-only version of the products.

For each case, the demo-only and live versions are nearly identical.
Product versions are the same, file versions for nearly all files is the
same.  We are using the same set of tools to author both msi files, and
there are no validation errors.

With our older product, upgrades from demo-only to live work just fine.
With the newer one during the upgrade install, something goes wrong in
that we get tons of messages like this:

MSI (c) (FC:B8) [14:09:49:611]: Disallowing installation of component:
{8DB0BBCC-DC82-4F69-994E-A6F1C8E00C58} since the same component with
higher versioned keyfile exists
MSI (c) (FC:B8) [14:09:49:621]: Disallowing installation of component:
{2AE62817-3D09-4F59-85A5-1FD384857695} since the same component with
higher versioned keyfile exists
MSI (c) (FC:B8) [14:09:49:631]: Disallowing installation of component:
{8BE4E830-4BFD-4A69-9C5A-9F4E741B9D88} since the same component with
higher versioned keyfile exists
MSI (c) (FC:B8) [14:09:49:631]: Disallowing installation of component:
{C81F0835-7F36-405E-899A-1F076B661473} since the same component with
higher versioned keyfile exists
MSI (c) (FC:B8) [14:09:49:641]: Disallowing installation of component:
{2E2865D7-D91D-4B6F-9F8E-E03B8244D365} since the same component with
higher versioned keyfile exists
MSI (c) (FC:B8) [14:09:49:651]: Disallowing installation of component:
{AD705EB7-A4A4-4EE9-97C5-BDF6A42B41D6} since the same component with
higher versioned keyfile exists

and the installed product is crippled in that there are many missing
binaries.  The messages actually come up at a couple of places.  First
in the UI sequence during CostFinalize, then in the UI sequence during
MigrateFeatureState action, and then again in the execute sequence
during CostFinalize.

Does anyone have *any* idea why these messages come up for one product
and not the other?  I suppose I can start to hack the installer build to
make each one more like the other until I reach a point where I identify
what the critical difference is, but that sounds like a huge waste of time.

-Eric
reply
 
 

Problem with MSI upgrades.... - Eric

26-Jan-07 06:17:52
I found the solution to the problem.  Or at least 95% of it.  In our
old product, we only supported U.S. English as a language for the
binaries, and our msi files listed only 1033 as the language for these
binaries in the component table.  Our new product supports 3 languages,
but the component table still only listed a language setting of 1033.

The piece that seems to be key here is the version block - or more
precisely exactly what languages in each executable have a version
block.  String tables don't matter so much, but localized version blocks
are the key.  In particular, it is the set of version blocks in the
keyfile for the component that matter.

MSI apparently was looking at the file on disk, enumerating the version
blocks and comparing file versions.  It apparently decided that the
files on disk had the same version numbers as the file versions in our
upgrade image, and also that the files on disk supported more languages
(by virtue of the fact that the language field in the File table was
incorrect), so it concluded that the file on disk should be preserved.

My major beef at the moment is that the error message that msi gives is
completely misleading.  I only discovered this by stepping through an
install with a debugger, and once it became clear that msi.dll was
enumerating the different language version blocks in the dlls and
executables that it dawned on me that this might be the actual cause.

I still have one more component that is fouled up with this message,
but it isn't an executable.  It is a truetype font - thus it isn't at
all clear what it really means to talk about version numbers and the
keyfile.  There apparently is a version number embedded in there, but I
don't know if MSI is smart enough to be able to get it.

-Eric
reply
 
Installing in variable location
promotion
Silverlight    WPF    WCF    WWF    LINQ   
JavaScript    AJAX    ASP.NET    XAML   
C#    VB.NET    VB 6.0    GDI+    IIS    XML   
.NET Generics    Anonymous Methods    Delegate   
Visual Studio .NET    Expression Blend    Virus   
Windows Vista    Windows XP    Windows Update   
Windows 2003 Server    Windows 2008 Server   
SQL Server    Microsoft Excel    Microsoft Word   
SharePoint    BizTalk    Virtual Earth   
.NET Compact Framework    Web Service   

"Everything" RSS / ATOM Feed Parser
How to send and receive messages through message queuing in .Net
How to Read text file as database
SQL Server 2005 Paging Performance Tip
Display code of web page.
Fully Scalable Excel File Importer class for .net using Microsoft Jet driver
Generic Chart Color Manager class that can be used for any charts
Helper class to style the infragistics wingrid
Using Reflection to detemine as Assembly Info in and out.
Helper class to play with Window (Owners and position)
Resolving displayname from the culture using the XmlLanguage and LanguageSpecificStringDictionary class