https://bugs.winehq.org/show_bug.cgi?id=35504
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|LibreOffice installation |LibreOffice 4.2 installer |creates two wrong files |copies MSVC++ runtime files | |into erroneous | |'C:\Win\System' path | |(directory | |targets/properties not | |re-resolved after updates | |from custom actions) CC| |focht@gmx.net
--- Comment #8 from Anastasius Focht focht@gmx.net --- Hello folks,
confirming.
In short: It's another problem of not re-evaluating TARGETDIR childs when modifications have been done via custom actions in between 'InstallUISequence' and 'InstallExecuteSequence'
'LibreOffice_4.2.8.2_Win_x86.msi'
Relevant part of 'InstallUISequence' tabled dumped with ORCA:
--- snip --- ... LaunchConditions 50 SetupInitialization 100 Shellextensionsdll5 Not REMOVE="ALL" And Not PATCH 148 FindRelatedProducts 150 CheckVersions NOT Installed 158 NewProductFound NEWPRODUCTS 160 SameProductFound SAMEPRODUCTS 170 CCPSearch CCP_TEST 250 RMCCPSearch Not CCP_SUCCESS And CCP_TEST 300 ValidateProductID 350 CompleteInstallPath Not REMOVE="ALL" And Not PATCH 396 MigrateInstallPath Not REMOVE="ALL" And Not PATCH 398 CostInitialize 400 FileCost 450 IsolateComponents 500 setUserProfile 510 setAllUsersProfile 512 ResolveSource Not Installed And Not PATCH 525 CostFinalize 550 ISInitAllUsers VersionNT And NOT Installed And Privileged 575 SelectLanguage NOT Installed 598 MigrateFeatureStates 600 PatchWelcome Installed And PATCH And Not IS_MAJOR_UPGRADE 625 InstallWelcome Not Installed 650 SetupResume Installed And (RESUME Or Preselected) And Not PATCH 700 MaintenanceWelcome Installed And Not RESUME And Not Preselected And Not PATCH 750 SetupProgress 800 ExecuteAction 850 ... --- snip ---
Relevant part of 'InstallExecuteSequence' table dumped with ORCA:
--- snip --- ... LaunchConditions 50 Shellextensionsdll5 Not REMOVE="ALL" And Not PATCH 98 FindRelatedProducts NOT ISSETUPDRIVEN 100 CheckInstallDirectory Not Installed 106 CheckVersions NOT Installed 108 NewProductFound NEWPRODUCTS 110 SameProductFound SAMEPRODUCTS 120 qslnkmsidll REMOVE="ALL" And Not PATCH 196 sdqsmsidll 198 CCPSearch CCP_TEST 200 RMCCPSearch Not CCP_SUCCESS And CCP_TEST 250 RenamePrgFolder VersionNT >= 600 And OLDPRODUCTS And Not REMOVE="ALL" And Not PATCH 298 ValidateProductID 300 CompleteInstallPath Not REMOVE="ALL" And Not PATCH 346 MigrateInstallPath Not REMOVE="ALL" And Not PATCH 348 CA_WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2 349 CA_SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2 349 CostInitialize 350 FileCost 400 IsolateComponents 450 Regallmsdocdll Not REMOVE="ALL" And Not PATCH And _IsSetupTypeMin<>"Custom" 498 CostFinalize 500 ISInitAllUsers VersionNT And NOT Installed And Privileged 525 ... --- snip ---
Relevant part of 'Directory' table dumped with ORCA:
--- snip --- Directory Directory_Parent DefaultDir
ProgramFilesFolder TARGETDIR . LO4_share_confi_soffi_modul_smath_fcabe2bf6 LO4_share_confi_soffi_modul_e3ff72cac smath CommonFilesFolder TARGETDIR . SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2 WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2 System WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2 TARGETDIR Win CommonAppDataFolder TARGETDIR . ... --- snip ---
Relevant part of 'CustomAction' table dumped with ORCA:
--- snip --- ... CA_WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2 51 WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2 [WindowsFolder] CA_SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2 51 SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2 [SystemFolder] ... --- snip ---
Relevant part of trace log, 'InstallUISequence':
--- snip --- ... 002e:trace:msi:ACTION_PerformAction Performing action (L"CostInitialize") ... 002e:trace:msi:ACTION_CostFinalize Building directory properties 002e:trace:msi:msi_resolve_target_folder resolving L"TARGETDIR" ... 002e:trace:msi:msi_set_property 0x153950 L"WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" L"C:\Win\" -1 002e:trace:msi:msi_get_property 0x153950 L"WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" (nil) 0x32f548 ... 002e:trace:msi:msi_set_property 0x153950 L"SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" L"C:\Win\System\" -1 002e:trace:msi:msi_get_property 0x153950 L"SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" (nil) 0x32f4f8 ... 002e:trace:msi:msi_resolve_target_folder L"SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" resolves to L"C:\Win\System\" 002e:trace:msi:msi_resolve_target_folder L"WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" resolves to L"C:\Win\" ... 002e:trace:msi:ACTION_CostFinalize Evaluating component conditions ... --- snip ---
Two custom actions running in 'InstallExecuteSequence' which set directory properties to proper values, effectively invalidating paths from already resolved directory childs.
--- snip --- ... 002e:trace:msi:ACTION_CustomAction Handling custom action L"CA_WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" (33 L"WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" L"[WindowsFolder]") ... 002e:trace:msi:msi_get_property returning L"C:\windows\" for property L"WindowsFolder" ... 002e:trace:msi:msi_set_property 0x153950 L"WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" L"C:\windows\" 11 002e:trace:msi:msi_get_property 0x153950 L"WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" (nil) 0x32f4b8 ... 002e:Call KERNEL32.WideCharToMultiByte(00000000,00000000,009b94e0 L"Action ended 6:06:00: CA_WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2. Return value 1.",ffffffff,00000000,00000000,00000000,00000000) ret=7ebdd213 ... 002e:trace:msi:ACTION_CustomAction Handling custom action L"CA_SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" (33 L"SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" L"[SystemFolder]") ... 002e:trace:msi:msi_get_property returning L"C:\windows\system32\" for property L"SystemFolder" ... 002e:trace:msi:msi_set_property 0x153950 L"SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" L"C:\windows\system32\" 20 002e:trace:msi:msi_get_property 0x153950 L"SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" (nil) 0x32f4b8 ... 002e:Call KERNEL32.WideCharToMultiByte(00000000,00000000,009b9648 L"Action ended 6:06:00: CA_SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2. Return value 1.",ffffffff,009b9450,00000063,00000000,00000000) ret=7ebdd241 ... --- snip ---
But this has no effect because the child properties are not re-evaluated due to TARGETDIR parent already resolved (value not changed), leading to this strange install path later.
--- snip --- ... 002e:trace:msi:ACTION_CostFinalize Building directory properties 002e:trace:msi:msi_resolve_target_folder resolving L"TARGETDIR" ... 002e:trace:msi:msi_resolve_target_folder L"TARGETDIR" already resolved to L"C:\" 002e:Call ntdll.RtlFreeHeap(00110000,00000000,009b9e50) ret=7eb86842 002e:Ret ntdll.RtlFreeHeap() retval=00000001 ret=7eb86842 002e:trace:msi:ACTION_CostFinalize Evaluating component conditions 002e:trace:msi:MSI_EvaluateConditionW (null) 002e:trace:msi:MSI_EvaluateConditionW (null) 002e:trace:msi:MSI_EvaluateConditionW (null) 002e:trace:msi:MSI_EvaluateConditionW (null) 002e:trace:msi:MSI_EvaluateConditionW (null) 002e:trace:msi:MSI_EvaluateConditionW (null) 002e:trace:msi:MSI_EvaluateConditionW (null) 002e:trace:msi:MSI_EvaluateConditionW (null) 002e:trace:msi:MSI_EvaluateConditionW (null) 002e:trace:msi:MSI_EvaluateConditionW (null) ... 002e:trace:msi:msi_resolve_target_folder L"SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" resolves to L"C:\Win\System\" 002e:trace:msi:msi_resolve_target_folder L"WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" resolves to L"C:\Win\" 002e:trace:msi:msi_resolve_target_folder resolving L"CommonAppDataFolder" 002e:trace:msi:msi_get_property 0x153950 L"CommonAppDataFolder" (nil) 0x32f554 ... 002e:trace:msi:ACTION_CostFinalize Calculating file cost ... 002e:trace:msi:set_target_path file L"F_CENTRAL_msvcp100_x86.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" resolves to L"C:\Win\System\msvcp100.dll" 002e:Call KERNEL32.GetFileAttributesW(01c294a8 L"C:\Win\System\msvcp100.dll") ret=7eb8b028 002e:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=7eb8b028 ... 002e:trace:msi:set_target_path file L"F_CENTRAL_msvcr100_x86.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" resolves to L"C:\Win\System\msvcr100.dll" 002e:Call KERNEL32.GetFileAttributesW(01c294f0 L"C:\Win\System\msvcr100.dll") ret=7eb8b028 002e:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=7eb8b028 002e:trace:msi:msi_set_property 0x153950 L"CostingComplete" L"1" -1 002e:trace:msi:msi_get_property 0x153950 L"CostingComplete" (nil) 0x32f2d8 ... 002e:Call KERNEL32.GetFileAttributesW(01c29438 L"C:\Program Files\LibreOffice 4\program\uno.ini") ret=7ebbc9b5 002e:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=7ebbc9b5 002e:trace:msi:calculate_install_state installing L"uno1.ini" (missing) 002e:Call KERNEL32.GetFileAttributesW(01c294a8 L"C:\Win\System\msvcp100.dll") ret=7ebbc9b5 002e:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=7ebbc9b5 002e:trace:msi:calculate_install_state installing L"F_CENTRAL_msvcp100_x86.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" (missing) 002e:Call KERNEL32.GetFileAttributesW(01c294f0 L"C:\Win\System\msvcr100.dll") ret=7ebbc9b5 002e:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=7ebbc9b5 002e:trace:msi:calculate_install_state installing L"F_CENTRAL_msvcr100_x86.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" (missing) ... 002e:trace:msi:cabinet_copy_file extracting L"F_CENTRAL_msvcp100_x86.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" -> L"C:\Win\System\msvcp100.dll" 002e:Call KERNEL32.CreateFileW(0208c490 L"C:\Win\System\msvcp100.dll",c0000000,00000000,00000000,00000002,00000080,00000000) ret=7ebc8ff1 002e:Ret KERNEL32.CreateFileW() retval=000000c4 ret=7ebc8ff1 ... 002e:Call KERNEL32.CreateDirectoryW(0208c490 L"C:\Win\System",00000000) ret=7eb87b2c 002e:Ret KERNEL32.CreateDirectoryW() retval=00000000 ret=7eb87b2c ... 002e:Call KERNEL32.CreateDirectoryW(01e16600 L"C:\Win",00000000) ret=7eb87b2c 002e:Ret KERNEL32.CreateDirectoryW() retval=00000001 ret=7eb87b2c ... 002e:Call KERNEL32.CreateDirectoryW(0208c490 L"C:\Win\System",00000000) ret=7eb87b2c 002e:Ret KERNEL32.CreateDirectoryW() retval=00000001 ret=7eb87b2c ... 002e:trace:msi:cabinet_copy_file extracting L"F_CENTRAL_msvcp100_x86.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" -> L"C:\Win\System\msvcp100.dll" 002e:Call KERNEL32.CreateFileW(0208c490 L"C:\Win\System\msvcp100.dll",c0000000,00000000,00000000,00000002,00000080,00000000) ret=7ebc8ff1 002e:Ret KERNEL32.CreateFileW() retval=000000c4 ret=7ebc8ff1 ... 002e:trace:msi:cabinet_copy_file extracting L"F_CENTRAL_msvcr100_x86.1DEE2A86_2F57_3629_8107_A71DBB4DBED2" -> L"C:\Win\System\msvcr100.dll" 002e:Call KERNEL32.CreateFileW(0208c490 L"C:\Win\System\msvcr100.dll",c0000000,00000000,00000000,00000002,00000080,00000000) ret=7ebc8ff1 002e:Ret KERNEL32.CreateFileW() retval=000000c4 ret=7ebc8ff1 ... 002e:Call KERNEL32.WideCharToMultiByte(00000000,00000000,01e1e7f8 L"Property(S): SystemFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2 = C:\windows\system32\",ffffffff,00000000,00000000,00000000,00000000) ret=7ebdd213 ... 002e:Call KERNEL32.WideCharToMultiByte(00000000,00000000,01e1e7f8 L"Property(S): WindowsFolder_x86_VC.1DEE2A86_2F57_3629_8107_A71DBB4DBED2 = C:\windows\",ffffffff,00000000,00000000,00000000,00000000) ret=7ebdd213 ... --- snip ---
--- snip --- Wine-dbg>c Stopped on breakpoint 2 at 0x7eb8b5c0 msi_resolve_target_folder+0x1d3 [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:2358] in msi 2358 TRACE("%s already resolved to %s\n", debugstr_w(name), debugstr_w(folder->ResolvedTarget)); Wine-dbg>bt Backtrace: =>0 0x7eb8b5c0 msi_resolve_target_folder+0x1d3(package=0x158c30, name="TARGETDIR", load_prop=0x1) [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:2358] in msi (0x0033f328) 1 0x7eb8b7b8 ACTION_CostFinalize+0x53(package=0x158c30) [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:2414] in msi (0x0033f3d8) 2 0x7eb99147 ACTION_HandleStandardAction+0x17a(package=0x158c30, action="CostFinalize") [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:7880] in msi (0x0033f5a8) 3 0x7eb99302 ACTION_PerformAction+0x67(package=0x158c30, action="CostFinalize", script=0xffffffff) [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:7912] in msi (0x0033f5e8) 4 0x7eb8748c ITERATE_Actions+0xf2(row=0x99e2f0, param=0x158c30) [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:513] in msi (0x0033f638) 5 0x7ebd5eee MSI_IterateRecords+0x82(view=0x16b7b8, count=0x0(nil), func=0x7eb87399, param=0x158c30) [/home/focht/projects/wine/wine.repo/src/dlls/msi/msiquery.c:185] in msi (0x0033f668) 6 0x7eb87700 ACTION_ProcessExecSequence+0xe8(package=0x158c30) [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:578] in msi (0x0033f6a8) 7 0x7eb937a1 ACTION_ExecuteAction+0x342(package=0x158c30) [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:5640] in msi (0x0033f6e8) 8 0x7eb99147 ACTION_HandleStandardAction+0x17a(package=0x158c30, action="ExecuteAction") [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:7880] in msi (0x0033f8b8) 9 0x7eb99302 ACTION_PerformAction+0x67(package=0x158c30, action="ExecuteAction", script=0xffffffff) [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:7912] in msi (0x0033f8f8) 10 0x7eb8748c ITERATE_Actions+0xf2(row=0x159338, param=0x158c30) [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:513] in msi (0x0033f948) 11 0x7ebd5eee MSI_IterateRecords+0x82(view=0x161460, count=0x0(nil), func=0x7eb87399, param=0x158c30) [/home/focht/projects/wine/wine.repo/src/dlls/msi/msiquery.c:185] in msi (0x0033f978) 12 0x7eb8778f ACTION_ProcessUISequence+0x74(package=0x158c30) [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:598] in msi (0x0033f9a8) 13 0x7eb939ee ACTION_INSTALL+0x66(package=0x158c30) [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:5694] in msi (0x0033f9c8) 14 0x7eb99147 ACTION_HandleStandardAction+0x17a(package=0x158c30, action="INSTALL") [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:7880] in msi (0x0033fb98) 15 0x7eb99302 ACTION_PerformAction+0x67(package=0x158c30, action="INSTALL", script=0xffffffff) [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:7912] in msi (0x0033fbd8) 16 0x7eb9989a MSI_InstallPackage+0x3ad(package=0x158c30, szPackagePath="LibreOffice_4.2.8.2_Win_x86.msi", szCommandLine=0x0(nil)) [/home/focht/projects/wine/wine.repo/src/dlls/msi/action.c:8057] in msi (0x0033fc38) 17 0x7ebcb1d5 MsiInstallProductW+0xbd(szPackagePath=<couldn't compute location>, szCommandLine=<couldn't compute location>) [/home/focht/projects/wine/wine.repo/src/dlls/msi/msi.c:252] in msi (0x0033fc78) 18 0x7efefeb5 WinMain+0x16a0(hInstance=<couldn't compute location>, hPrevInstance=<couldn't compute location>, lpCmdLine=<couldn't compute location>, nCmdShow=<couldn't compute location>) [/home/focht/projects/wine/wine.repo/src/programs/msiexec/msiexec.c:997] in msiexec (0x0033fde8) 19 0x7eff059e main+0xeb(argc=<couldn't compute location>, argv=<couldn't compute location>) [/home/focht/projects/wine/wine.repo/src/dlls/winecrt0/exe_main.c:49] in msiexec (0x0033fe68) 20 0x7eff0496 __wine_spec_exe_entry+0x56(peb=<couldn't compute location>) [/home/focht/projects/wine/wine.repo/src/dlls/winecrt0/exe_entry.c:36] in msiexec (0x0033fea8) 21 0x7b46d930 call_process_entry+0xb() in kernel32 (0x0033fec8) 22 0x7b46da71 start_process+0x132(entry=<couldn't compute location>, peb=<couldn't compute location>) [/home/focht/projects/wine/wine.repo/src/dlls/kernel32/process.c:1099] in kernel32 (0x0033ffd8) 23 0x7b46d93e start_process_wrapper+0x9() in kernel32 (0x0033ffec) --- snip ---
Wine's directory targets/properties change tracking is kinda broken in this aspect. See also bug 38761 which is another manifestation.
As a quick fix here, I've let it re-resolve all childs which made the installer copy the VC++ runtime files into proper place:
--- snip --- $ find .wine/drive_c/windows/system32 ! -newermt "1 Jan 2015" -ls 8783876 756 -rw-rw-r-- 1 focht focht 773968 Dec 4 2014 .wine/drive_c/windows/system32/msvcr100.dll 8783910 412 -rw-rw-r-- 1 focht focht 421200 Dec 4 2014 .wine/drive_c/windows/system32/msvcp100.dll --- snip ---
Re-resolving the whole directory table property tree is not a proper solution, one has to check if one path dependency (parent) has really changed which would also fix bug 38761
$ sha1sum LibreOffice_4.2.8.2_Win_x86.msi 0102dda5bc6af2a45e8362cd9fe26c639c4c585e LibreOffice_4.2.8.2_Win_x86.msi
$ du -sh LibreOffice_4.2.8.2_Win_x86.msi 211M LibreOffice_4.2.8.2_Win_x86.msi
$ wine --version wine-3.7-77-g540c48b911
Regards