[Bug 16956] Lexware: Installation of .Net 2.0 SP 1 fails

wine-bugs at winehq.org wine-bugs at winehq.org
Tue Aug 11 15:57:02 CDT 2009


http://bugs.winehq.org/show_bug.cgi?id=16956





--- Comment #15 from Anastasius Focht <focht at gmx.net>  2009-08-11 15:57:00 ---
Hello,

something goes wrong when applying the transforms from all patches ...

List of patches looks ok but the InstallFile action fails:

--- snip ---
...
0037:trace:msi:MsiGetFileVersionW
L"C:\\windows\\winsxs\\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.1433_x-ww_5cf844d2\\msvcr80.dll"
(nil) 0 (nil) 0
0037:trace:msi:MSI_DatabaseOpenViewW L"SELECT * FROM `Media` WHERE
`LastSequence` >= 1002 AND `DiskId` >= 0 ORDER BY `DiskId`" 0x33ce1c 
...
0037:trace:msi:writeout_cabinet_stream wrote 2890387 bytes to
L"C:\\windows\\temp\\PCWae2f.tmp"
0037:trace:msi:msi_cabextract Extracting L"C:\\windows\\temp\\PCWae2f.tmp"
0037:trace:msi:cabinet_notify (0)
0037:trace:msi:cabinet_notify (2) 
...
0037:trace:msi:cabinet_copy_file extracting
L"C:\\windows\\Microsoft.NET\\Framework\\v2.0.50727\\ASP.NETWebAdminFiles\\Images\\yellowCORNER.gif"
0037:trace:msi:cabinet_notify (3)
0037:err:msi:ACTION_InstallFiles compressed file wasn't extracted
(L"C:\\windows\\winsxs\\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.1433_x-ww_5cf844d2\\msvcr80.dll")
0037:err:msi:ITERATE_Actions Execution halted, action L"InstallExecute"
returned 1603 
--- snip ---

When installing that SxS assembly, the internal cabinet stream from
"ASPNET.msp" is used. The SxS assembly it fails to extract lives in another
cabinet stream - contained in "CLR.msp" (second patch package).

Looking at msi processing of first two msp's to show the problem...

(1) ASPNET.msp 

"ASPNET.msp" is the first patch package to be applied and the transform inserts
row with diskid = 101 key into Media table.

--- snip ---
003d:trace:msi:msi_apply_patch_package 0x16e3e0
L"c:\\1f1fe15d723ca23ce97251a94afedddc\\wcu\\dotnetframework\\dotnetfx20\\ASPNET.msp"
003d:trace:msi:MSI_OpenDatabaseW
L"c:\\1f1fe15d723ca23ce97251a94afedddc\\wcu\\dotnetframework\\dotnetfx20\\ASPNET.msp"
(null)
003d:trace:msidb:enum_stream_names stream  0 -> L"\4840\3b3f\43f2\4438\45b1"
L"\4840_Columns"
003d:trace:msidb:enum_stream_names stream  1 -> L"\4840\3f7f\4164\422f\4836"
L"\4840_Tables"
003d:trace:msidb:enum_stream_names stream  2 -> L"T1ToU1" L"T1ToU1"
003d:trace:msidb:enum_stream_names stream  3 -> L"#T1ToU1" L"#T1ToU1"
003d:trace:msidb:enum_stream_names stream  4 ->
L"\3b19\47e0\3a8c\47cb\4217\3bf7\4821" L"PCW_CAB_NetFX"
...
003d:trace:msidb:msi_table_apply_transform transform contains stream
L"\4840Media"
...
003d:trace:msidb:read_table_from_storage L"Media"
003d:trace:msidb:read_stream_data L"Media" -> L"\4840\4216\4327\4824"
003d:trace:msidb:read_table_from_storage Read 14 bytes
003d:trace:msidb:read_table_from_storage Transposing data from 1 rows
003d:trace:msidb:TABLE_CreateView table 0x177348 found with 6 columns
003d:trace:msidb:TABLE_CreateView L"Media" one row is 14 bytes 
...
003d:trace:msidb:msi_table_load_transform 0x1845a8 0x207fb0 0x1583dd0 L"Media"
003d:trace:msidb:read_stream_data L"Media" -> L"\4840\4216\4327\4824"
003d:trace:msidb:TABLE_CreateView 0x1845a8 L"Media" 0x33d11c
003d:trace:msidb:TABLE_CreateView table 0x177348 found with 6 columns
003d:trace:msidb:TABLE_CreateView L"Media" one row is 14 bytes
003d:trace:msidb:TABLE_execute 0x16e968 (nil)
003d:trace:msidb:TABLE_execute There are 6 columns
003d:trace:msidb:msi_table_load_transform name = L"Media" columns = 6 row_size
= 14 raw size = 16 
003d:trace:msidb:MSI_CreateRecord 6
003d:trace:msidb:msi_get_transform_record row ->
003d:trace:msidb:MSI_RecordSetInteger 0x1580238 1 101
003d:trace:msidb:msi_get_transform_record  field 1 [0x8065]
003d:trace:msidb:MSI_RecordSetInteger 0x1580238 2 1211
003d:trace:msidb:msi_get_transform_record  field 2 [0x800004bb]
003d:trace:msidb:MSI_RecordSetStringW 0x1580238 3 L""
003d:trace:msidb:msi_get_transform_record  field 3 [L""]
003d:trace:msidb:MSI_RecordSetStringW 0x1580238 4 L"#PCW_CAB_NetFX"
003d:trace:msidb:msi_get_transform_record  field 4 [L"#PCW_CAB_NetFX"]
003d:trace:msidb:MSI_RecordSetStringW 0x1580238 5 L""
003d:trace:msidb:msi_get_transform_record  field 5 [L""]
003d:trace:msidb:MSI_RecordSetStringW 0x1580238 6 L"PatchMediaSrc"
003d:trace:msidb:msi_get_transform_record  field 6 [L"PatchMediaSrc"]
003d:trace:msidb:msi_table_load_transform inserting record
003d:trace:msidb:TABLE_insert_row 0x16e968 0x1580238 FALSE
003d:trace:msidb:MSI_RecordGetInteger 0x1580238 1
003d:trace:msidb:MSI_RecordGetInteger 0x1580238 2
003d:trace:msidb:MSI_RecordGetInteger 0x1580238 1
003d:trace:msidb:table_create_new_row 0x16e968 FALSE
003d:trace:msidb:TABLE_insert_row insert_row returned 00000000 
--- snip ---

(2) CLR.msp

--- snip ---
003d:trace:msi:msi_apply_patch_package 0x16e3e0
L"c:\\1f1fe15d723ca23ce97251a94afedddc\\wcu\\dotnetframework\\dotnetfx20\\CLR.msp"
003d:trace:msi:MSI_OpenDatabaseW
L"c:\\1f1fe15d723ca23ce97251a94afedddc\\wcu\\dotnetframework\\dotnetfx20\\CLR.msp"
(null)
003d:trace:msidb:enum_stream_names stream  0 -> L"\4840\3b3f\43f2\4438\45b1"
L"\4840_Columns"
003d:trace:msidb:enum_stream_names stream  1 -> L"\4840\3f7f\4164\422f\4836"
L"\4840_Tables"
003d:trace:msidb:enum_stream_names stream  2 -> L"T1ToU1" L"T1ToU1"
003d:trace:msidb:enum_stream_names stream  3 -> L"#T1ToU1" L"#T1ToU1"
003d:trace:msidb:enum_stream_names stream  4 ->
L"\3b19\47e0\3a8c\47cb\4217\3bf7\4821" L"PCW_CAB_NetFX"
...
003d:trace:msidb:msi_table_apply_transform transform contains stream
L"\4840Media"
003d:trace:msidb:TABLE_CreateView 0x1845a8 L"Media" 0x33d25c
003d:trace:msidb:TABLE_CreateView table 0x177348 found with 6 columns
003d:trace:msidb:TABLE_CreateView L"Media" one row is 14 bytes
003d:trace:msidb:TABLE_execute 0x1580ea0 (nil)
003d:trace:msidb:TABLE_execute There are 6 columns
003d:trace:msidb:TABLE_delete 0x1580ea0 
...
003d:trace:msidb:msi_table_load_transform 0x1845a8 0x15800e8 0x159d270 L"Media"
003d:trace:msidb:read_stream_data L"Media" -> L"\4840\4216\4327\4824"
003d:trace:msidb:TABLE_CreateView 0x1845a8 L"Media" 0x33d11c
003d:trace:msidb:TABLE_CreateView table 0x177348 found with 6 columns
003d:trace:msidb:TABLE_CreateView L"Media" one row is 14 bytes
003d:trace:msidb:TABLE_execute 0x1580fd0 (nil)
003d:trace:msidb:TABLE_execute There are 6 columns
003d:trace:msidb:msi_table_load_transform name = L"Media" columns = 6 row_size
= 14 raw size = 16
003d:trace:msidb:MSI_CreateRecord 6
003d:trace:msidb:msi_get_transform_record row ->
003d:trace:msidb:MSI_RecordSetInteger 0x1581018 1 101
003d:trace:msidb:msi_get_transform_record  field 1 [0x8065]
003d:trace:msidb:MSI_RecordSetInteger 0x1581018 2 1036
003d:trace:msidb:msi_get_transform_record  field 2 [0x8000040c]
003d:trace:msidb:MSI_RecordSetStringW 0x1581018 3 L""
003d:trace:msidb:msi_get_transform_record  field 3 [L""]
003d:trace:msidb:MSI_RecordSetStringW 0x1581018 4 L"#PCW_CAB_NetFX"
003d:trace:msidb:msi_get_transform_record  field 4 [L"#PCW_CAB_NetFX"]
003d:trace:msidb:MSI_RecordSetStringW 0x1581018 5 L""
003d:trace:msidb:msi_get_transform_record  field 5 [L""]
003d:trace:msidb:MSI_RecordSetStringW 0x1581018 6 L"PatchMediaSrc"
003d:trace:msidb:msi_get_transform_record  field 6 [L"PatchMediaSrc"]
003d:trace:msidb:msi_table_load_transform inserting record
003d:trace:msidb:TABLE_insert_row 0x1580fd0 0x1581018 FALSE
003d:trace:msidb:MSI_RecordGetInteger 0x1581018 1
003d:trace:msidb:MSI_RecordGetInteger 0x1581018 2
003d:trace:msidb:MSI_RecordGetInteger 0x1581018 1
003d:err:msidb:msi_table_load_transform insert row failed 
...
--- snip ---

Subsequent row insertions into Media table fail after applying first .msp
transform(s).

I manually dumped the transforms from all .msp and verified with Orca - most of
them use indeed the same disk id = 101 -> (dupe) key.

That means later msi package install operates on broken database with only the
transform from first msp applied to the Media/PatchPackage tables (referencing
ASPNET internal cabinet stream) - hence the failure.

The question arises how to apply transforms to Media table with same disk id
keys coming from previous transforms (also affects PatchPackage table).
A solution might be to rebase them to have the transforms from all patches
succeeding in inserting rows into Media table to preserve patch source.
Though such rebasing requires knowledge of patch order.

Experimenting with Orca 3.x has shown it overwrites the row with duplicate key
in Media table when applying multiple patches/transforms to msi db which can't
be the correct way because the previous patch source gets lost.

MSDN and even Stebner's blog (Microsoft MSI Guru) are not really helpful on
this specific problem (or I missed it).

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list