[Bug 24200] New: msi: properly handle msidbComponentAttributes64bit attribute to support x64 installers that mix architectures in a single MSI package (32-bit and 64-bit components, filesystem, registry)
wine-bugs at winehq.org
wine-bugs at winehq.org
Sun Aug 29 10:49:11 CDT 2010
http://bugs.winehq.org/show_bug.cgi?id=24200
Summary: msi: properly handle msidbComponentAttributes64bit
attribute to support x64 installers that mix
architectures in a single MSI package (32-bit and
64-bit components, filesystem, registry)
Product: Wine
Version: 1.3.1
Platform: x86-64
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: msi
AssignedTo: wine-bugs at winehq.org
ReportedBy: focht at gmx.net
Hello,
one of the main problems with current Wine msi is there are x64 installers that
mix architectures in a single MSI package: 64-bit and 32-bit components
(without a separate 32-bit installer for 32-bit components).
Basically 'msidbComponentAttributes64bit' is not handled.
Example: "mscoree.dll" -> .NET bootstrapper
"Component" table:
--- snip 32-bit ---
MSCOREE_DLL_____X86.3643236F_FC70_11D3_A536_0090278A1BB8
{173A6EB3-6403-11D4-A53F-0090278A1BB8}
DD_SystemFolder_X86.3643236F_FC70_11D3_A536_0090278A1BB8 8
FL_mscoree_dll_____X86.3643236F_FC70_11D3_A536_0090278A1BB8
--- snip 32-bit ---
Attributes = 8
--- snip 64-bit ---
MSCOREE_DLL_____A64.3643236F_FC70_11D3_A536_0090278A1BB8
{70B495DC-D747-4182-B6D7-86C8A2244B25}
SystemFolder.3643236F_FC70_11D3_A536_0090278A1BB8 264
FL_mscoree_dll_____A64.3643236F_FC70_11D3_A536_0090278A1BB8
--- snip 64-bit ---
Attributes = 264 (256 = msidbComponentAttributes64bit + 8)
When it comes to "InstallFiles" action:
--- snip 32-bit component ---
001b:trace:msi:msi_get_property returning L"C:\\windows\\system32\\" for
property L"DD_SystemFolder_X86.3643236F_FC70_11D3_A536_0090278A1BB8"
...
001b:Call KERNEL32.MultiByteToWideChar(00000000,00000000,7fffe7ce1110
"FL_mscoree_dll_____X86.3643236F_FC70_11D3_A536_0090278A1BB8",ffffffff,7fffe7d4ba00,7fff0000003c)
ret=7fffed8ff38c
...
001b:trace:msi:resolve_folder Working to resolve
L"DD_SystemFolder_X86.3643236F_FC70_11D3_A536_0090278A1BB8"
...
001b:trace:msi:cabinet_copy_file extracting
L"C:\\windows\\system32\\mscoree.dll"
001b:Call KERNEL32.CreateFileW(7fffe7d0b980
L"C:\\windows\\system32\\mscoree.dll",c0000000,00000000,00000000,7fff00000002,7fff00000080,00000000)
ret=7fffed8ff409
001b:Ret KERNEL32.CreateFileW() retval=000000ac ret=7fffed8ff409
--- snip 32-bit component ---
--- snip 64-bit component ---
001b:trace:msi:msi_get_property returning L"C:\\windows\\system32\\" for
property L"SystemFolder.3643236F_FC70_11D3_A536_0090278A1BB8"
...
001b:Call KERNEL32.MultiByteToWideChar(00000000,00000000,7fffe7d247a0
"FL_mscoree_dll_____A64.3643236F_FC70_11D3_A536_0090278A1BB8",ffffffff,7fffe7d15ab0,0000003c)
ret=7fffed8ff38c
...
001b:trace:msi:resolve_folder Working to resolve
L"SystemFolder.3643236F_FC70_11D3_A536_0090278A1BB8"
...
001b:trace:msi:cabinet_copy_file extracting
L"C:\\windows\\system32\\mscoree.dll"
001b:Call KERNEL32.CreateFileW(7fffe7d15b40
L"C:\\windows\\system32\\mscoree.dll",c0000000,00000000,00000000,7fff00000002,00000080,00000000)
ret=7fffed8ff409
001b:Ret KERNEL32.CreateFileW() retval=000000b0 ret=7fffed8ff40
--- snip 64-bit component ---
The first extracted 32-bit version that gets (incorrectly) extracted to
system32 folder (remember: we're 64-bit install here) and subsequently gets
overwritten with 64-bit version later.
For the registry the same applies: In order to create registry values in 64bit
HKLM for components marked with "msidbComponentAttributes64bit" there is
nothing to change in 64-bit installs.
For 32-bit components (attrs < 256) the registry stuff must go to Wow6432Node.
Ideally Wine's msi should also support something like
"msidbComponentAttributesDisableRegistryReflection" to allow 32-bit components
to write into 64bit HKLM but that's not required for now.
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