Windows Installer
(1)
InstallUISequence
(1)
AdminUISequence
(1)
AdminExecuteSequence
(1)
AdvtExecuteSequence
(1)
Database
(1)
StringPool
(1)
KeyPath
(1)

Patch Taking Long Time to Run

Asked By mawa31
19-Jan-10 12:34 PM
Hi All,

We have a patch that contains approximately 40 files, but they are all
fairly small.  When we apply the patch, it seems to take a long time
to install.  What would be causing this?  it is actually taking longer
to apply the patch than it does to install the complete application.

I guess I will try logging and examine that to see what is taking so
long....

Here is some events and surrounding log file entries where time gaps
occur..

MSI (c) (E8:84) [10:47:33:409]: Validating transform
'Target01ToUpgrade01' with validation bits 0x922
MSI (c) (E8:84) [10:47:33:409]: Transform 'Target01ToUpgrade01' is
valid.
MSI (c) (E8:84) [10:47:33:472]: Note: 1: 2262 2: Property 3:
-2147287038
MSI (c) (E8:84) [10:47:33:472]: Note: 1: 2262 2: Feature 3:
-2147287038
MSI (c) (E8:84) [10:47:33:472]: Note: 1: 2262 2: Condition 3:
-2147287038
MSI (c) (E8:84) [10:47:34:487]: Exceeded 64K strings. Bumping database
string index size.
MSI (c) (E8:84) [10:50:55:475]: Note: 1: 2262 2: Dialog 3:
-2147287038
MSI (c) (E8:84) [10:50:55:475]: Note: 1: 2262 2: InstallUISequence 3:
-2147287038
MSI (c) (E8:84) [10:50:55:475]: Note: 1: 2262 2: AdminUISequence 3:
-2147287038
MSI (c) (E8:84) [10:50:55:475]: Note: 1: 2262 2: AdminExecuteSequence
3: -2147287038

MSI (s) (34:10) [10:52:18:367]: Validating transform
'Target01ToUpgrade01' with validation bits 0x922
MSI (s) (34:10) [10:52:18:367]: Transform 'Target01ToUpgrade01' is
valid.
MSI (s) (34:10) [10:52:18:461]: Note: 1: 2262 2: Property 3:
-2147287038
MSI (s) (34:10) [10:52:18:461]: Note: 1: 2262 2: Feature 3:
-2147287038
MSI (s) (34:10) [10:52:18:476]: Note: 1: 2262 2: Condition 3:
-2147287038
MSI (s) (34:10) [10:52:19:476]: Exceeded 64K strings. Bumping database
string index size.
MSI (s) (34:10) [10:55:39:806]: Note: 1: 2262 2: Dialog 3:
-2147287038
MSI (s) (34:10) [10:55:39:806]: Note: 1: 2262 2: InstallUISequence 3:
-2147287038
MSI (s) (34:10) [10:55:39:806]: Note: 1: 2262 2: AdminUISequence 3:
-2147287038
MSI (s) (34:10) [10:55:39:822]: Note: 1: 2262 2: AdminExecuteSequence
3: -2147287038
MSI (s) (34:10) [10:55:39:822]: Note: 1: 2262 2: AdvtExecuteSequence
3: -2147287038

The rest of the logging seemed to indicate no significant time gaps
for one operation.  Does anyone know what might be causing this?  If
you need the full log or more snippets, please let me know.

I ran through Validation in Wise and found some entries with StringOverflow.

mawa31 replied to mawa31
22-Jan-10 01:06 PM
I ran through Validation in Wise and found some entries with String
Overflow.  This is stuff that has been in the install for a while and
has not caused any problems with patching before...

String overflow (greater than length permitted in column); Table:
Component, Column: KeyPath, Key(s): downlevel_manifest.
8.0.50727.762.98CB24AD_52FB_DB5F_FF1F_C8B3B9A1E18E	ice03.html
Component	KeyPath	downlevel_manifest.
8.0.50727.762.98CB24AD_52FB_DB5F_FF1F_C8B3B9A1E18E

Evaluation: ICE03

String overflow (greater than length permitted in column); Table:
Component, Column: KeyPath, Key(s): downlevel_manifest.
8.0.50727.193.98CB24AD_52FB_DB5F_FF1F_C8B3B9A1E18E	ice03.html
Component	KeyPath	downlevel_manifest.
8.0.50727.193.98CB24AD_52FB_DB5F_FF1F_C8B3B9A1E18E

Evaluation: ICE03

String overflow (greater than length permitted in column); Table:
Component, Column: KeyPath, Key(s): downlevel_manifest.
8.0.50727.104.98CB24AD_52FB_DB5F_FF1F_C8B3B9A1E18E	ice03.html
Component	KeyPath	downlevel_manifest.
8.0.50727.104.98CB24AD_52FB_DB5F_FF1F_C8B3B9A1E18E

Evaluation: ICE03

String overflow (greater than length permitted in column); Table:
Component, Column: KeyPath, Key(s): downlevel_manifest.
8.0.50727.103.98CB24AD_52FB_DB5F_FF1F_C8B3B9A1E18E	ice03.html
Component	KeyPath	downlevel_manifest.
8.0.50727.103.98CB24AD_52FB_DB5F_FF1F_C8B3B9A1E18E

Evaluation: ICE03

String overflow (greater than length permitted in column); Table:
Component, Column: KeyPath, Key(s): downlevel_manifest.
8.0.50727.101.98CB24AD_52FB_DB5F_FF1F_C8B3B9A1E18E	ice03.html
Component	KeyPath	downlevel_manifest.
8.0.50727.101.98CB24AD_52FB_DB5F_FF1F_C8B3B9A1E18E

Evaluation: ICE03

String overflow (greater than length permitted in column); Table:
Component, Column: KeyPath, Key(s): downlevel_manifest.
8.0.50727.100.98CB24AD_52FB_DB5F_FF1F_C8B3B9A1E18E	ice03.html
Component	KeyPath	downlevel_manifest.
8.0.50727.100.98CB24AD_52FB_DB5F_FF1F_C8B3B9A1E18E

Evaluation: ICE03

String overflow (greater than length permitted in column); Table:
Component, Column: KeyPath, Key(s): downlevel_manifest.
8.0.50727.100.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E	ice03.html
Component	KeyPath	downlevel_manifest.
8.0.50727.100.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E

Evaluation: ICE03

String overflow (greater than length permitted in column); Table:
Component, Column: KeyPath, Key(s): downlevel_manifest.
8.0.50727.101.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E	ice03.html
Component	KeyPath	downlevel_manifest.
8.0.50727.101.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E

Evaluation: ICE03

String overflow (greater than length permitted in column); Table:
Component, Column: KeyPath, Key(s): downlevel_manifest.
8.0.50727.103.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E	ice03.html
Component	KeyPath	downlevel_manifest.
8.0.50727.103.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E

Evaluation: ICE03

String overflow (greater than length permitted in column); Table:
Component, Column: KeyPath, Key(s): downlevel_manifest.
8.0.50727.104.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E	ice03.html
Component	KeyPath	downlevel_manifest.
8.0.50727.104.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E

Evaluation: ICE03

String overflow (greater than length permitted in column); Table:
Component, Column: KeyPath, Key(s): downlevel_manifest.
8.0.50727.762.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E	ice03.html
Component	KeyPath	downlevel_manifest.
8.0.50727.762.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E

Evaluation: ICE03

String overflow (greater than length permitted in column); Table:
Component, Column: KeyPath, Key(s): downlevel_manifest.
8.0.50727.193.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E	ice03.html
Component	KeyPath	downlevel_manifest.
8.0.50727.193.63E949F6_03BC_5C40_FF1F_C8B3B9A1E18E

Evaluation: ICE03

I would expect that the "Exceeded 64K strings" message has moreto do with the

Kalle Olavi Niemitalo replied to mawa31
21-Jan-10 06:04 PM
I would expect that the "Exceeded 64K strings" message has more
to do with the number of different strings (or possibly the total
size of all strings) than with the size of individual strings.

The Windows Installer database keeps strings in a common pool and
refers to them from the fields in rows in tables.
http://msdn.microsoft.com/en-us/library/aa372032(VS.85).aspx
This string pool may be why ORDER BY only collects identical
strings together and does not sort strings to alphabetical order.
http://msdn.microsoft.com/en-us/library/aa372021(VS.85).aspx

The message you get gives me the impression that these string
references (or ID numbers or whatever) are originally 16-bit, but
your patches add so many strings that 16 bits no longer suffice,
and Windows Installer then has to expand all the existing
references to 24 or 32 bits, which takes time.  (Perhaps this is
an uncommon operation and not properly optimized.)  I do not see
any way to avoid that delay for your patches, except by reducing
the number of strings in the patch, which is probably infeasible.
However, if your next version of the complete MSI package already
has 32-bit string references, and you install that one (rather
than patch from an earlier version to it), then patching forward
from that one should not incur the delay, I think.
Unfortunately, I do not know any way to check what kind of string
references an MSI package uses.

m/en-us/library/aa372032(VS.85).aspxsdn.microsoft.

mawa31 replied to Kalle Olavi Niemitalo
22-Jan-10 01:06 PM
m/en-us/library/aa372032(VS.85).aspx
sdn.microsoft.com/en-us/library/aa372021(VS.85).aspx

How do I know if my .msi has 32 bit references?
From Wine sources, it appears that string references can be16-bit or 24-bit,
Kalle Olavi Niemitalo replied to mawa31
22-Jan-10 01:42 PM
From Wine sources, it appears that string references can be
16-bit or 24-bit, never 32-bit as I initially thought.
There is a flag near the beginning of the _StringPool stream:
http://source.winehq.org/git/wine.git/?a=blob;f=dlls/msi/string.c;h=3bdc4360bd056078d7392fe233705a4fa645065f;hb=HEAD#l510
You could perhaps extract that stream with msidb.exe and then
view it with a hexadecimal editor.

Microsoft does not document the format of this stream though,
so I suppose it is free to change the format in a future version
of Windows Installer; of course only for packages whose Page
Count Summary Property indicates they require a Windows Installer
version that supports the new format.  (In principle, current
versions of Windows Installer may already support such a format,
even if the current tools never generate that.)
Post Question To EggHeadCafe