https://bugs.winehq.org/show_bug.cgi?id=34207
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |focht@gmx.net Summary|dotnet20sp1 installer fails |Microsoft .NET Framework |most of the time |2.0 service pack installers | |fail 'NGEN service version | |check' custom action | |(service not stopped before | |binary update) Severity|minor |normal
--- Comment #8 from Anastasius Focht focht@gmx.net --- Hello folks,
confirming, still present.
The NGEN service is automatically started by installer. Usually this shouldn't be necessary since it's an auto-start type service. It's likely to ensure the availability in case a user forcibly stopped it or changed it to manual start.
--- snip --- ... [11/29/14,19:39:07] Setup.exe: ========== Logging started ========== [11/29/14,19:39:07] Setup.exe: ===================================== [11/29/14,19:39:07] Setup.exe: Command line: c:\fa68242e9a4ae9784efa9d\setup.exe /q [11/29/14,19:39:07] Setup.exe: GetGlobalCustomProperty - Property: {481CEF9F-033A-11D3-ACE2-00C04F8EEBA1} - PropertyName: Disable Error Logging - Value: 0 [11/29/14,19:39:07] Setup.exe: ISetupManager::LoadSetupLog() completed [11/29/14,19:39:07] UTILS::RunNGENAction: Started [11/29/14,19:39:07] UTILS::RunNGENAction: starting "C:\windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe queue pause" [11/29/14,19:39:07] UTILS::RunNGENAction: ngen.exe returned 0 --- snip ---
--- snip --- ... 0024:Call KERNEL32.CreateProcessW(00000000,0033e688 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe queue pause",00000000,00000000,00000000,00000000,00000000,0033ef1c L"C:\windows",0033e214,0033e258) ret=3ab13b96 ... 0028:Starting process L"C:\windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe" (entryproc=0x411ba1) ... 0028:Call advapi32.OpenServiceW(001334a8,00138a38 L"clr_optimization_v2.0.50727_32",000f01ff) ret=64067c07 ... 0028:Call advapi32.StartServiceW(00138de0,00000001,0033f2dc) ret=64067d01 ... --- snip ---
This prevents some NGEN service binaries from being updated in place.
--- snip --- 002d:trace:msi:ACTION_PerformAction Performing action (L"InstallFiles") ... 002d:Call version.GetFileVersionInfoW(02306b78 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe",00000000,000007a4,022d2f38) ret=7dab24ea ... 002d:trace:msi:calculate_install_state new L"2.0.50727.1433" old 2.0.50727.42 ... 002d:Call version.GetFileVersionInfoW(02306c00 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe",00000000,00000784,022d2f38) ret=7dab24ea ... 002d:trace:msi:calculate_install_state new L"2.0.50727.1433" old 2.0.50727.42 ... 002d:Call version.GetFileVersionInfoSizeW(02306c90 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvc.dll",0033cffc) ret=7dab2495 ... 002d:trace:msi:calculate_install_state new L"2.0.50727.1433" old 2.0.50727.42 ... 002d:trace:msi:cabinet_copy_file extracting L"FL_ngen_exe_____X86.3643236F_FC70_11D3_A536_0090278A1BB8" -> L"C:\windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe" 002d:Call KERNEL32.CreateFileW(022ccfa8 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe",c0000000,00000000,00000000,00000002,00000080,00000000) ret=7daf9e7e 002d:Ret KERNEL32.CreateFileW() retval=000001ac ret=7daf9e7e ... 002d:trace:msi:cabinet_copy_file extracting L"FL_mscorsvw_exe_93402_____X86.3643236F_FC70_11D3_A536_0090278A1BB8" -> L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe" 002d:Call KERNEL32.CreateFileW(022ccfb8 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe",c0000000,00000000,00000000,00000002,00000080,00000000) ret=7daf9e7e 002d:Ret KERNEL32.CreateFileW() retval=ffffffff ret=7daf9e7e 002d:Call KERNEL32.GetFileAttributesW(022ccfb8 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe") ret=7daf9ea8 002d:Ret KERNEL32.GetFileAttributesW() retval=00000020 ret=7daf9ea8 002d:trace:msi:cabinet_copy_file file in use, scheduling rename operation ... 002d:Call KERNEL32.CreateFileW(022cd0b8 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\msi4f1b.tmp",c0000000,00000000,00000000,00000002,00000080,00000000) ret=7dafa153 002d:Ret KERNEL32.CreateFileW() retval=000001ac ret=7dafa153 002d:Call KERNEL32.MoveFileExW(022ccfb8 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe",00000000,00000004) ret=7dafa17a 002d:Ret KERNEL32.MoveFileExW() retval=00000001 ret=7dafa17a 002d:Call KERNEL32.MoveFileExW(022cd0b8 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\msi4f1b.tmp",022ccfb8 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe",00000004) ret=7dafa19b 002d:Ret KERNEL32.MoveFileExW() retval=00000001 ret=7dafa19b ... 002d:trace:msi:cabinet_copy_file extracting L"FL_mscorsvc_dll_93043_____X86.3643236F_FC70_11D3_A536_0090278A1BB8" -> L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvc.dll" 002d:Call KERNEL32.CreateFileW(022ccfb8 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvc.dll",c0000000,00000000,00000000,00000002,00000080,00000000) ret=7daf9e7e 002d:Ret KERNEL32.CreateFileW() retval=ffffffff ret=7daf9e7e 002d:Call KERNEL32.GetFileAttributesW(022ccfb8 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvc.dll") ret=7daf9ea8 002d:Ret KERNEL32.GetFileAttributesW() retval=00000020 ret=7daf9ea8 002d:trace:msi:cabinet_copy_file file in use, scheduling rename operation ... 002d:Call KERNEL32.GetTempFileNameW(022cd038 L"C:\windows\Microsoft.NET\Framework\v2.0.50727",7db5e58e L"msi",00000000,022cd0b8) ret=7dafa0ff 002d:Ret KERNEL32.GetTempFileNameW() retval=00004f1e ret=7dafa0ff ... 002d:Call KERNEL32.CreateFileW(022cd0b8 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\msi4f1e.tmp",c0000000,00000000,00000000,00000002,00000080,00000000) ret=7dafa153 002d:Ret KERNEL32.CreateFileW() retval=000001ac ret=7dafa153 002d:Call KERNEL32.MoveFileExW(022ccfb8 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvc.dll",00000000,00000004) ret=7dafa17a 002d:Ret KERNEL32.MoveFileExW() retval=00000001 ret=7dafa17a 002d:Call KERNEL32.MoveFileExW(022cd0b8 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\msi4f1e.tmp",022ccfb8 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvc.dll",00000004) ret=7dafa19b 002d:Ret KERNEL32.MoveFileExW() retval=00000001 ret=7dafa19b ... --- snip ---
The installer schedules pending rename actions for the binaries that are locked.
The NGEN service version check fails since some binaries are not up-to-date yet (pending renames).
--- snip --- ... 0042:Call msi.MsiDoActionW(00000004,00bc3500 L"DD_CA_NgenServiceVersionCheck_X86.3643236F_FC70_11D3_A536_0090278A1BB8") ret=00bd0880 ... 0042:trace:msi:ACTION_CustomAction Handling custom action L"DD_CA_NgenServiceVersionCheck_X86.3643236F_FC70_11D3_A536_0090278A1BB8" (401 L"BIN_File_237924_X86" L"NgenServiceVersionCheck") ... 0042:trace:msi:msi_set_property 0x18f008 L"CustomActionData" L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvc.dll;C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe;C:\windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe;" -1 ... 0042:trace:msi:HANDLE_CustomType1 Calling function L"NgenServiceVersionCheck" from L"C:\users\focht\Temp\msi37d7.tmp" ... 0043:Starting thread proc 0x7dad5c92 (arg=0x22dd45c) 0043:trace:msi:DllThread custom action (43) started ... 0043:trace:msi:ACTION_CallDllFunction calling L"NgenServiceVersionCheck" ... 0043:Call msi.MsiRecordSetStringW(00000001,00000000,00bfa3c8 L"11/29/14 19:02:51 DDSet_Status: File Version for [2] is [3]") ret=00bd057e ... 0043:Call msi.MsiGetFileVersionW(02523a38 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvc.dll",02523ba0,02c6d748,02523da8,02c6d748) ret=00bd15a1 ... 0043:trace:msi:MSI_ProcessMessage (nil) 0x3a0b01b5 0x39e64ac4 7fdf 10 L"1: 0 2: C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvc.dll 3: 2.0.50727.42 4: 5: 6: 7: 8: 9: 10: " ... 0043:Call msi.MsiRecordSetStringW(00000001,00000000,00bfa3c8 L"11/29/14 19:02:51 DDSet_Status: File Version for [2] is [3]") ret=00bd057e ... 0043:Call msi.MsiGetFileVersionW(02523aae L"C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe",02523ba0,02c6d748,02523da8,02c6d748) ret=00bd15a1 ... 0043:trace:msi:MSI_ProcessMessage (nil) 0x3a0b01b5 0x39e64ac4 7fdf 10 L"1: 0 2: C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe 3: 2.0.50727.42 4: 5: 6: 7: 8: 9: 10: " ... 0043:Call msi.MsiRecordSetStringW(00000001,00000000,00bfa3c8 L"11/29/14 19:02:51 DDSet_Status: File Version for [2] is [3]") ret=00bd057e ... 0043:Call msi.MsiGetFileVersionW(02523b24 L"C:\windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe",02523ba0,02c6d748,02523da8,02c6d748) ret=00bd15a1 ... 0043:trace:msi:MSI_ProcessMessage (nil) 0x3a0b01b5 0x39e64ac4 7fdf 10 L"1: 0 2: C:\windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe 3: 2.0.50727.1433 4: 5: 6: 7: 8: 9: 10: " ... 0043:Call msi.MsiRecordSetStringW(00000001,00000000,00bfa3c8 L"11/29/14 19:02:51 DDSet_Error: File Versions do not match: [2] and [3]") ret=00bd057e ... 0043:trace:msi:MSI_ProcessMessage (nil) 0x3a0b01b5 0x39e64ac4 7fdf 10 L"1: 0 2: 2.0.50727.1433 3: 2.0.50727.42 4: 5: 6: 7: 8: 9: 10: " ... 0043:trace:seh:raise_exception code=e06d7363 flags=1 addr=0x7b83b1d3 ip=7b83b1d3 tid=0043 0043:trace:seh:raise_exception info[0]=19930520 0043:trace:seh:raise_exception info[1]=02c6dfa0 0043:trace:seh:raise_exception info[2]=00bf5b4c 0043:trace:seh:raise_exception eax=7b826e65 ebx=7b8be000 ecx=19930520 edx=02c6d684 esi=02c6d728 edi=02c6d6f0 0043:trace:seh:raise_exception ebp=02c6d6c8 esp=02c6d664 cs=0023 ds=002b es=002b fs=0063 gs=006b flags=00000283 0043:trace:seh:call_stack_handlers calling handler at 0xbf4eb8 code=e06d7363 flags=1 ... 0043:Call msi.MsiRecordSetStringW(00000001,00000000,00bfa3c8 L"11/29/14 19:02:51 DDSet_Error: NgenServiceVersionCheck Failed") ret=00bd04f0 ... 0043:trace:msi:MSI_ProcessMessage (nil) 0x3a0b01b5 0x39e64ac4 7fdf 10 L"1: 0 2: 2.0.50727.1433 3: 2.0.50727.42 4: 5: 6: 7: 8: 9: 10: " ... 0043:Call msi.MsiRecordSetStringW(00000001,00000000,00bfa3c8 L"11/29/14 19:02:51 DDSet_Exit: NgenServiceVersionCheck ended with return value [2]") ret=00bd0639 ... 0043:trace:msi:MSI_ProcessMessage (nil) 0x3a0b01b5 0x39e64ac4 7fdf 10 L"1: 0 2: 1603 3: 2.0.50727.42 4: 5: 6: 7: 8: 9: 10: " ... 0043:trace:msi:DllThread custom action (43) returned 1603 ... 002d:err:msi:ITERATE_Actions Execution halted, action L"DD_CA_ScheduleNgenServiceVersionCheck_X86.3643236F_FC70_11D3_A536_0090278A1BB8" returned 1603 ... 0024:Call oleaut32.SysAllocString(009b43e0 L" GFN_MID Framework 2.0a Setup, RENAME, mscorsvw.exe, mscorsvw.exe, C:\windows\Microsoft.NET\Framework\v2.0.50727\msicab3.tmp, ( 2.0.50727.1433 (REDBITS.050727-1400) ) , ( Wed Oct 24 01:47:40 2007 ) , C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvw.exe, ( 2.0.50727.42 (RTM.0507"...) ret=3a0c896c ... 0024:Call oleaut32.SysAllocString(009b43e0 L" GFN_MID Framework 2.0a Setup, RENAME, mscorsvc.dll, mscorsvc.dll, C:\windows\Microsoft.NET\Framework\v2.0.50727\msicab6.tmp, ( 2.0.50727.1433 (REDBITS.050727-1400) ) , ( Wed Oct 24 01:47:40 2007 ) , C:\windows\Microsoft.NET\Framework\v2.0.50727\mscorsvc.dll, ( 2.0.50727.42 (RTM.0507"...) ret=3a0c896c 0024:Ret oleaut32.SysAllocString() retval=022b5c9c ret=3a0c896c --- snip ---
I found a suspicious looking 'StopServices' action which is executed some time before the 'InstallFiles':
--- snip --- 0024:trace:msi:MSI_ProcessMessage (nil) 0x3a0b01b5 0x39e64ac4 7fdf 10 L"Action start 19:39:21: StopServices." ... 0024:trace:msi:ITERATE_StopService component not scheduled for removal L"ASPNET_ISAPI_DLL_____X86.3643236F_FC70_11D3_A536_0090278A1BB8" ... 0024:trace:msi:ITERATE_StopService component not scheduled for removal L"ASPNET_STATE_EXE_____X86.3643236F_FC70_11D3_A536_0090278A1BB8" ... 0024:trace:msi:ITERATE_StopService component not scheduled for removal L"MSCORSVW_EXE_____X86.3643236F_FC70_11D3_A536_0090278A1BB8" ... 0024:trace:msi:MSI_ProcessMessage (nil) 0x3a0b01b5 0x39e64ac4 7fdf 10 L"Action ended 19:39:21: StopServices. Return value 0." ... 0024:trace:msi:ACTION_HandleStandardAction scheduling rollback action 0024:trace:msi:msi_schedule_action Scheduling action L"StartServices" in script 2 --- snip ---
Source: http://source.winehq.org/git/wine.git/blob/609de1a80a6ea99523737c4ada266ddc0...
--- snip --- 6156 static UINT ITERATE_StopService( MSIRECORD *rec, LPVOID param ) 6157 { ... 6175 comp->Action = msi_get_component_action( package, comp ); 6176 if (comp->Action != INSTALLSTATE_ABSENT) 6177 { 6178 TRACE("component not scheduled for removal %s\n", debugstr_w(component)); 6179 return ERROR_SUCCESS; 6180 } 6181 6182 scm = OpenSCManagerW( NULL, NULL, SC_MANAGER_CONNECT ); ... --- snip ---
Not sure where the 'INSTALLSTATE_ABSENT' condition stems from. The service (component) is not to be removed but updated. A service stop is a requirement to allow updating the binaries in place.
Letting the NGEN service stop makes .NET service pack installers to work (no 'winetricks' needed).
$ sha1sum NetFx20SP1_x86.exe eef5a36924cdf0c02598ccf96aa4f60887a49840 NetFx20SP1_x86.exe
$ du -sh NetFx20SP1_x86.exe 24M NetFx20SP1_x86.exe
$ wine --version wine-1.7.32
Regards