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@winehq.org ReportedBy: focht@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
http://bugs.winehq.org/show_bug.cgi?id=24200
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |dotnet, download, | |Installer, win64 URL| |http://www.microsoft.com/do | |wnloads/details.aspx?family | |id=b44a0000-acf8-4fa1-affb- | |40e78d788b00&displaylang=en
--- Comment #1 from Anastasius Focht focht@gmx.net 2010-08-29 10:50:37 CDT --- Hello,
filling some fields.
Regards
http://bugs.winehq.org/show_bug.cgi?id=24200
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Fixed by SHA1| |f0ea60049c4c0a484f7006a14ca | |3375cb0fd9260 Status|NEW |RESOLVED Resolution| |FIXED
--- Comment #2 from Anastasius Focht focht@gmx.net 2013-04-28 15:44:37 CDT --- Hello folks,
revisiting ... this was fixed some time ago.
Both flavours of .NET Framework 2.0 are now properly installed from combined NetFx64.exe in 64-bit WINEPREFIX - when bug 24196 gets fixed (already tested).
WinVer needs to be at least "Windows 2003" to overcome 64-bit machine check (by design, same as DirectX/XAudio2).
...\WINDOWS\Microsoft.Net\Framework\v2.0.50727 (WoW64) ...\WINDOWS\Microsoft.Net\Framework64\v2.0.50727
Same goes for syswow64/system32.
Various commits regarding 32/64-bit file component and registry parts.
Picking commit http://source.winehq.org/git/wine.git/?a=commit;h=f0ea60049c4c0a484f7006a14c... ("msi: Add support for 64-bit registry components.")
Thanks Hans.
Regards
http://bugs.winehq.org/show_bug.cgi?id=24200
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #3 from Alexandre Julliard julliard@winehq.org 2013-05-10 13:41:56 CDT --- Closing bugs fixed in 1.5.30.
https://bugs.winehq.org/show_bug.cgi?id=24200
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- URL|http://www.microsoft.com/do |https://web.archive.org/web |wnloads/details.aspx?family |/20100925191339/http://down |id=b44a0000-acf8-4fa1-affb- |load.microsoft.com/download |40e78d788b00&displaylang=en |/a/3/f/a3f1bf98-18f3-4036-9 | |b68-8e6de530ce0a/NetFx64.ex | |e