[Bug 30785] MS Office 2007 reports msmxl 5 as uninstalled (WoW64)

wine-bugs at winehq.org wine-bugs at winehq.org
Fri Dec 26 09:57:44 CST 2014


https://bugs.winehq.org/show_bug.cgi?id=30785

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |Installer
                 CC|                            |focht at gmx.net
          Component|-unknown                    |msi

--- Comment #23 from Anastasius Focht <focht at 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/98ae03ff4d1d8b1292301486b5ea30988de6fa51:/dlls/msi/package.c#l903

--- 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

-- 
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