https://bugs.winehq.org/show_bug.cgi?id=30785
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |Installer CC| |focht@gmx.net Component|-unknown |msi
--- Comment #23 from Anastasius Focht focht@gmx.net --- Hello folks,
confirming.
The 32-bit bootstrap installer executes both, 32-bit and 64-bit components/product install parts on the 32-bit msi client side.
* 64-bit components are put into wrong directories, causing the 32-bit product install part to not overwrite binaries * 32-bit registry view vs. 64-bit registry view issues
This might be doable/fixable on the msi client side, unlike Windows msi which tends to hand over to 64-bit msi server process for 64-bit parts. There is an exception though, 64-bit custom actions need to be run in 64-bit server process anyway.
See also https://bugs.winehq.org/show_bug.cgi?id=30713#c2 which is about the same/similar issue.
Cabinets carrying the payloads for 32-bit and 64-bit MSXML5 component:
--- snip --- $ cabextract -l OWOW64WW.cab | grep msxml
2460936 | 26.10.2006 13:41:16 | msxml5.dll.E8CC1EEC_B775_41B0_9B11_C1D71DDB47A7 ... --- snip ---
--- snip --- $ cabextract -l EnterWW.cab | grep msxml
... 1422088 | 26.10.2006 13:41:16 | msxml5.dll.AB5E1073_AD9B_48DF_B07F_3E445B5A45CF --- snip ---
Some 32-bit component product installs are done first, with 64-bit Office 2007 components product install mixed in between.
--- snip --- ... 0025:Call msi.MsiInstallProductW(0107dbf8 L"C:\MSOCache\All Users\{90120000-0030-0000-0000-0000000FF1CE}-C\Office64WW.msi",01176540 L"ADDLOCAL=MsoInstalledPackagesScoped,OfficeExample64bitFilesA,SetupXmlFiles,SetupControllerFiles,PPTXmlEditVerb64,SearchFilters64Files,XDocsXmlEditVerb64,Gimme_OnDemandData,ProductNonBootFiles64,ExcelXmlEditVerb64,ProductFiles64,OneNote64Files,WordXmlEditVerb64,MsoCommonShellHandler64bit,OfficeExample"...) ret=006e79c6 ... 0025:trace:msi:load_component Loading Component L"MSXML_DLL.E8CC1EEC_B775_41B0_9B11_C1D71DDB47A7" ... 0025:Call KERNEL32.GetSystemDirectoryW(126bc88c,00000104) ret=7e15454f 0025:Ret KERNEL32.GetSystemDirectoryW() retval=00000013 ret=7e15454f ... 0025:trace:msi:msi_set_property 0x116c310 L"System64Folder" L"C:\windows\system32\" -1 ... 0025:Call KERNEL32.GetSystemWow64DirectoryW(126bc88c,00000104) ret=7e1545a3 0025:Ret KERNEL32.GetSystemWow64DirectoryW() retval=00000013 ret=7e1545a3 ... 0025:trace:msi:msi_set_property 0x116c310 L"SystemFolder" L"C:\windows\syswow64\" -1 ... 0025:Call shell32.SHGetFolderPathW(00000000,00000026,00000000,00000000,126bc88c) ret=7e15460f 0025:Call advapi32.RegCreateKeyW(80000002,7e6e8f20 L"Software\Microsoft\Windows\CurrentVersion",126bc298) ret=7e69c7e9 0025:Ret advapi32.RegCreateKeyW() retval=00000000 ret=7e69c7e9 0025:Call advapi32.RegQueryValueExW(000000dc,7e6e9820 L"ProgramFilesDir",00000000,126bc294,126bc2e8,126bc290) ret=7e69c841 0025:Ret advapi32.RegQueryValueExW() retval=00000000 ret=7e69c841 0025:Call advapi32.RegCloseKey(000000dc) ret=7e69c928 0025:Ret advapi32.RegCloseKey() retval=00000000 ret=7e69c928 ... 0025:Ret shell32.SHGetFolderPathW() retval=00000000 ret=7e15460f ... 0025:trace:msi:msi_set_property 0x116c310 L"ProgramFiles64Folder" L"C:\Program Files (x86)\" -1 ... 0025:trace:msi:set_target_path file L"msxml5.dll.E8CC1EEC_B775_41B0_9B11_C1D71DDB47A7" is named L"msxml5.dll" ... 0025:trace:msi:set_target_path resolves to L"C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE11\msxml5.dll" 0025:Call KERNEL32.GetFileAttributesW(013ec138 L"C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE11\msxml5.dll") ret=7e0f9b5d 0025:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=7e0f9b5d ... 0025:trace:msi:msi_set_property 0x1159e88 L"CostingComplete" L"1" -1 ... 0025:trace:msi:MSI_SetFeatureStates component L"MSXML_DLL.E8CC1EEC_B775_41B0_9B11_C1D71DDB47A7" (installed 2 request 3 action 3) ... 0025:trace:msi:ACTION_ProcessComponents Component L"MSXML_DLL.E8CC1EEC_B775_41B0_9B11_C1D71DDB47A7" (L"F922466D24AFC3E448E6F527DE13D42F") Keypath=L"C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE11\msxml5.dll" RefCount=1 Clients=1 Action=3 ... 0025:Call KERNEL32.GetFileAttributesW(013ec138 L"C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE11\msxml5.dll") ret=7e132a0c 0025:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=7e132a0c 0025:trace:msi:calculate_install_state file L"msxml5.dll.E8CC1EEC_B775_41B0_9B11_C1D71DDB47A7" is missing ... 0025:trace:msi:cabinet_copy_file extracting L"msxml5.dll.E8CC1EEC_B775_41B0_9B11_C1D71DDB47A7" -> L"C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE11\msxml5.dll" 0025:Call KERNEL32.CreateFileW(0134e060 L"C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE11\msxml5.dll",c0000000,00000000,00000000,00000002,00000080,00000000) ret=7e140e9e 0025:Ret KERNEL32.CreateFileW() retval=00002228 ret=7e140e9e ... 0025:trace:msi:ITERATE_WriteRegistryValues setting value (null) of L"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{F5078F18-C551-11D3-89B9-0000F81FE221}\5.0" type 1 ... 0025:trace:msi:ITERATE_WriteRegistryValues setting value (null) of L"HKEY_CLASSES_ROOT\Msxml2.DSOControl.5.0" type 1 ... 0025:trace:msi:ITERATE_WriteRegistryValues setting value (null) of L"HKEY_CLASSES_ROOT\Msxml2.DSOControl.5.0\CLSID" type 1 ... 0025:trace:msi:ITERATE_WriteRegistryValues setting value (null) of L"HKEY_CLASSES_ROOT\CLSID\{88D969E7-F192-11D4-A65F-0040963251E5}" type 1 ... 0025:trace:msi:ITERATE_WriteRegistryValues setting value (null) of L"HKEY_CLASSES_ROOT\CLSID\{88D969E7-F192-11D4-A65F-0040963251E5}\InProcServer32" type 1 ... --- snip ---
This obviously can't work if run within 32-bit installer process:
http://source.winehq.org/git/wine.git/blob/98ae03ff4d1d8b1292301486b5ea30988...
--- snip --- 903 else if (sys_info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) 904 { ... 917 SHGetFolderPathW( NULL, CSIDL_PROGRAM_FILES, NULL, 0, pth ); 918 PathAddBackslashW( pth ); 919 msi_set_property( package->db, szProgramFiles64Folder, pth, -1 ); --- snip ---
You would need to access the 64-bit registry view for these which is kinda ugly since you can't do it from this place without replicating shell32 registry code in msi.
--- snip --- $ pwd /home/focht/wine64/drive_c/Program Files (x86)/Common Files/Microsoft Shared/OFFICE11
$ file *.dll msxml5.dll: PE32+ executable (DLL) (GUI) x86-64, for MS Windows --- snip ---
The registry part of 64-bit COM inproc server is correct (using KEY_WOW64_64KEY).
64-bit registry view with 'wine64 regedit':
--- snip --- [HKEY_CLASSES_ROOT\CLSID{88D969E7-F192-11D4-A65F-0040963251E5}] @="XML Schema Cache 5.0"
[HKEY_CLASSES_ROOT\CLSID{88D969E7-F192-11D4-A65F-0040963251E5}\InProcServer32] @="C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE11\msxml5.dll" "ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID{88D969E7-F192-11D4-A65F-0040963251E5}\ProgID] @="Msxml2.XMLSchemaCache.5.0"
[HKEY_CLASSES_ROOT\CLSID{88D969E7-F192-11D4-A65F-0040963251E5}\TypeLib] @="{F5078F18-C551-11D3-89B9-0000F81FE221}"
[HKEY_CLASSES_ROOT\CLSID{88D969E7-F192-11D4-A65F-0040963251E5}\Version] @="5.0" --- snip ---
The 32-bit product install part:
--- snip --- ... 0025:Call msi.MsiInstallProductW(010e5cc8 L"C:\MSOCache\All Users\{90120000-0030-0000-0000-0000000FF1CE}-C\EnterpriseWW.msi",013c96c8 L"ADDLOCAL=PPTPresentationTemplates,OfficeOLESupport,VisioPreviewerFiles,ThemesAdditionalFiles,OneNoteToIEAddin,WORDBibliographyFiles,PPTFiles,OfficeAppSupport,ACCESSNonBootMiscFullFiles,DeveloperWizards,MsoInstalledPackagesScoped,ProductFiles_B2TR,XDOCSEditorFiles,OutlookDVOrg97Files,WordConverter12Fi"...) ret=006e79c6 ... 0025:trace:msi:MSI_SetFeatureStates component L"MSXML_DLL.AB5E1073_AD9B_48DF_B07F_3E445B5A45CF" (installed 2 request 3 action 3) ... 0025:trace:msi:ACTION_ProcessComponents Component L"MSXML_DLL.AB5E1073_AD9B_48DF_B07F_3E445B5A45CF" (L"D3AFE80AA038F8147B1AB826F0BD1F16") Keypath=L"C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE11\msxml5.dll" RefCount=2 Clients=1 Action=3 ... ... 0025:trace:msi:set_target_path resolves to L"C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE11\msxml5.dll" 0025:Call KERNEL32.GetFileAttributesW(023b7378 L"C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE11\msxml5.dll") ret=7e0f9b5d 0025:Ret KERNEL32.GetFileAttributesW() retval=00000020 ret=7e0f9b5d ... 0025:trace:msi:calculate_install_state new L"5.20.1072.0" old 5.20.1072.0 0025:trace:msi:calculate_install_state destination file version equal or greater, not overwriting ... 0025:trace:msi:ITERATE_WriteRegistryValues setting value (null) of L"HKEY_CLASSES_ROOT\CLSID\{88D969E5-F192-11D4-A65F-0040963251E5}\InProcServer32" type 1 ... --- snip ---
The 32-bit msxml5 dll is not installed here since the target is "blocked" by previous 64-bit dll (version check match).
The registry data for the 32-bit COM inproc server is incorrectly written into 64-bit registry view (you must not use KEY_WOW64_64KEY here). You don't find anything in the 32-bit registry view:
--- snip --- [HKEY_LOCAL_MACHINE\Software\Wow6432Node\Classes\CLSID{88D969E5-F192-11D4-A65F-0040963251E5}] --- snip ---
The MS Office main binaries (.exe, .dll) are 32-bit hence will instantiate the 32-bit COM inproc server which can't work due to the mishaps.
--- snip --- $ pwd /home/focht/wine64/drive_c/Program Files (x86)/Microsoft Office/Office12
$ file WINWORD.EXE WINWORD.EXE: PE32 executable (GUI) Intel 80386, for MS Windows --- snip ---
$ wine --version wine-1.7.33-84-gfecbc88
Regards