https://bugs.winehq.org/show_bug.cgi?id=39269
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download, Installer Status|UNCONFIRMED |NEW URL| |http://downloadnavy.fxinter | |active.com/wu_updates_priva | |te/FXWebPlayer.exe CC| |focht@gmx.net Component|-unknown |shell32 Summary|missing stub for |FX Interactive Webplayer |downloading/installing .m2i |fails to install, reporting |file |'File not found' | |(SHFileOperation FO_MOVE | |operation with wildcard | |source fails) Ever confirmed|0 |1
--- Comment #1 from Anastasius Focht focht@gmx.net --- Hello folks,
confirming.
The download is completely fine.
Although "FIXME" stub messages could indicate some missing functionality in many cases it's not the culprit and they tend to be rather harmless.
--- snip --- $ WINEDEBUG=+tid,+seh,+relay,+wininet wine ./FXWebPlayer.exe >>log.txt 2>&1 ... 002d:Call KERNEL32.OutputDebugStringA(007e4c90 "[WuUpdater] 00% Descargando C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer.w2i: ") ret=0046a011 ... 002d:Call wininet.HttpOpenRequestA(00000002,00491dd4 "GET",005e9240 "wu_updates_public/fxwebplayer.w2i",00491dd8 "HTTP/1.0",00000000,004a48ec,04000000,00000000) ret=004729a3 ... 002d:trace:wininet:HTTP_HttpSendRequestW full request -> "GET /wu_updates_public/fxwebplayer.w2i HTTP/1.0\r\nAccept: */*\r\nHost: downloadnavy.fxinteractive.com\r\nUser-Agent: Mozilla/4.0 (compatible; )\r\n\r\n" ... 002d:trace:wininet:HTTP_GetResponseHeaders version [L"HTTP/1.1"] status code [L"200"] status text [L"OK"] ... 002d:trace:wininet:HTTP_GetResponseHeaders got line "Content-Length: 4189201", now interpreting ... 002d:Call KERNEL32.OutputDebugStringA(007e4c98 "Down...") ret=0046a068 ... 002d:Call KERNEL32.CreateFileA(005e8f68 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer.w2i",40000000,00000007,00000000,00000002,00000000,00000000) ret=0046a1fe 002d:Ret KERNEL32.CreateFileA() retval=000000b4 ret=0046a1fe ... 002d:Call wininet.InternetReadFile(00000003,005ea4e8,0000ffff,007e5c84) ret=00471f99 ... 002d:trace:wininet:netconn_read read 60496 bytes 002d:trace:wininet:HTTPREQ_Read retrieved 60496 bytes (4189201) 002d:trace:wininet:WININET_Release object 0x157808 refcount = 1 002d:trace:wininet:InternetReadFile -- TRUE (0) (bytes read: 60496) 002d:Ret wininet.InternetReadFile() retval=00000001 ret=00471f99 ... 002d:Call KERNEL32.OutputDebugStringA(007e4c88 "4189201 bytes a -0.00 KB/s\n") ret=0046a011 ... 002d:Call KERNEL32.CreateFileA(005e8f68 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer.w2i",80000000,00000003,00000000,00000003,08000000,00000000) ret=0046b983 002d:Ret KERNEL32.CreateFileA() retval=000000ac ret=0046b983 002d:Call KERNEL32.GetFileSize(000000ac,007e6550) ret=0046b995 002d:Ret KERNEL32.GetFileSize() retval=003fec11 ret=0046b995 002d:Call KERNEL32.SetFilePointer(000000ac,00000000,00000000,00000002) ret=0046abd5 002d:Ret KERNEL32.SetFilePointer() retval=003fec11 ret=0046abd5 002d:Call KERNEL32.SetFilePointer(000000ac,fffffffc,00000000,00000002) ret=0046abe6 002d:Ret KERNEL32.SetFilePointer() retval=003fec0d ret=0046abe6 002d:Call KERNEL32.ReadFile(000000ac,007e6504,00000004,007e64e8,00000000) ret=0046abfa 002d:Ret KERNEL32.ReadFile() retval=00000001 ret=0046abfa 002d:Call advapi32.CryptAcquireContextA(007e64d4,00000000,00491ecc "Microsoft Base Cryptographic Provider v1.0",00000001,00000000) ret=00473ef6 ... 002d:Ret advapi32.CryptAcquireContextA() retval=00000000 ret=00473ef6 002d:Call advapi32.CryptCreateHash(00000000,00008004,00000000,00000000,007e64dc) ret=00473f45 002d:Ret advapi32.CryptCreateHash() retval=00000000 ret=00473f45 ... 002d:Call advapi32.CryptVerifySignatureA(00000000,005ea4e8,00000080,00000000,00000000,00000000) ret=00473f8f 002d:Ret advapi32.CryptVerifySignatureA() retval=00000000 ret=00473f8f 002d:Call advapi32.CryptDestroyHash(00000000) ret=00473fa1 002d:Ret advapi32.CryptDestroyHash() retval=00000000 ret=00473fa1 002d:Call KERNEL32.GetLastError() ret=00456aee 002d:Ret KERNEL32.GetLastError() retval=00000006 ret=00456aee ... 002d:Call KERNEL32.OutputDebugStringA(007e54b0 "[WuUpdater] Firma no verificada para 'C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer.w2i'.\n") ret=0046a011 ... 002d:Call KERNEL32.CreateFileA(005faa40 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\data/7zr.exe",c0000000,00000007,00000000,00000002,08000000,00000000) ret=0046a1fe 002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe ... 002d:Call KERNEL32.CreateFileA(005fa640 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\data/dbghelp.dll",c0000000,00000007,00000000,00000002,08000000,00000000) ret=0046a1fe 002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe ... 002d:Call KERNEL32.CreateFileA(005fa640 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\data/FXCaps.dll",c0000000,00000007,00000000,00000002,08000000,00000000) ret=0046a1fe 002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe ... 002d:Call KERNEL32.CreateFileA(005fa640 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\data/Fxp.dll",c0000000,00000007,00000000,00000002,08000000,00000000) ret=0046a1fe 002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe ... 002d:Call KERNEL32.CreateFileA(005f0be8 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\data/fxplanet.ocx",c0000000,00000007,00000000,00000002,08000000,00000000) ret=0046a1fe 002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe ... 002d:Call KERNEL32.CreateFileA(005f0b80 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\data/FXWebPlayer.exe",c0000000,00000007,00000000,00000002,08000000,00000000) ret=0046a1fe 002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe ... 002d:Call KERNEL32.CreateFileA(005f0b80 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\data/MFC71.dll",c0000000,00000007,00000000,00000002,08000000,00000000) ret=0046a1fe 002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe ... 002d:Call KERNEL32.CreateFileA(005f0b80 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\data/mfc80.dll",c0000000,00000007,00000000,00000002,08000000,00000000) ret=0046a1fe 002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe ... 002d:Call KERNEL32.CreateFileA(005f0be8 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\wu2_install.IT.cfg",c0000000,00000007,00000000,00000002,08000000,00000000) ret=0046a1fe 002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe ... 002d:Call KERNEL32.CreateFileA(005e8f68 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer.w2i",80000000,00000003,00000000,00000003,00000000,00000000) ret=0040247a 002d:Ret KERNEL32.CreateFileA() retval=000000ac ret=0040247a 002d:Call KERNEL32.CloseHandle(000000ac) ret=00402489 002d:Ret KERNEL32.CloseHandle() retval=00000001 ret=00402489 002d:Call KERNEL32.DeleteFileA(005e8f68 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer.w2i") ret=0046c61a 002d:Ret KERNEL32.DeleteFileA() retval=00000001 ret=0046c61a ... 002d:Call KERNEL32.lstrlenA(007e5c6c "Descarga de W2I completada con \xe9xito") ret=00468559 ... 002d:Call KERNEL32.lstrlenA(007e533c "ProcessInstallW2I (C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer -> C:\users\Public\Application Data\FXWebPlayer, FXWebPlayer)") ret=00468559 ... 002d:Call KERNEL32.lstrlenA(005f0209 "DEST") ret=00401811 ... 002d:Call KERNEL32.lstrlenA(005faac8 "C:\users\Public\Application Data\FXWebPlayer") ret=00403c59 ... 002d:Call KERNEL32.lstrlenA(007e5028 "W2I:Rename C:\users\Public\Application Data\FXWebPlayer\npfxplanet.dll -> C:\users\Public\Application Data\FXWebPlayer\_npfxplanet.dll") ret=00468559 ... 002d:Call shell32.SHFileOperationA(007e587c) ret=004117b9 ... 002d:Ret shell32.SHFileOperationA() retval=00000402 ret=004117b9 ... 002d:Call KERNEL32.lstrlenA(007e5030 "ERROR ProcessInstallW2I (RENAME)") ret=00468559 ... 002d:Call KERNEL32.lstrlenA(007e5028 "W2I:Move C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\Data\*.* -> C:\users\Public\Application Data\FXWebPlayer") ret=00468559 ... 002d:Call KERNEL32.CreateDirectoryA(005ea418 "C:\users\Public\Application Data\FXWebPlayer",00000000) ret=00411398 002d:Ret KERNEL32.CreateDirectoryA() retval=00000001 ret=00411398 002d:Call shell32.SHFileOperationA(007e587c) ret=0041140d 002d:Call KERNEL32.MultiByteToWideChar(00000000,00000000,007e5914 "C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\Data\*.*",00000051,00000000,00000000) ret=7e22ac06 ... 002d:Ret shell32.SHFileOperationA() retval=000004c7 ret=0041140d 002d:Call KERNEL32.GetLastError() ret=00456aee 002d:Ret KERNEL32.GetLastError() retval=00000012 ret=00456aee ... 002d:Call KERNEL32.lstrlenA(007e5030 "ERROR ProcessInstallW2I (MOVE)") ret=00468559 ... 002d:Call shell32.ShellExecuteExA(007e6488) ret=0040db54 ... 002d:Call KERNEL32.CreateProcessW(00000000,007e5070 L""C:\users\Public\Application Data\FXWebPlayer\FXWebPlayer.exe" /url connect",00000000,00000000,00000000,00000410,00000000,00156ee8 L"C:\users\Public\Application Data\FXWebPlayer",007e4b40,007e4b30) ret=7e223af6 002d:Ret KERNEL32.CreateProcessW() retval=00000000 ret=7e223af6 ... 002d:Call KERNEL32.FormatMessageW(00001000,00000000,00000002,00000000,007e3bc8,00000800,00000000) ret=7e2275f6 002d:Ret KERNEL32.FormatMessageW() retval=00000011 ret=7e2275f6 002d:Call user32.MessageBoxW(00000000,007e3bc8 L"File not found.\r\n",00000000,00000010) ret=7e22761e --- snip ---
The bootstrapper downloads and verifies package successfully. It unpacks the files to a temporary location:
--- snip --- $ ls -1sh users/focht/Temp/{02B22974-0252-4c1a-AC08-0346941DEA7A}/fxwebplayer/data/ total 8.8M 328K 7zr.exe 796K dbghelp.dll 32K FXCaps.dll 224K Fxp.dll 844K fxplanet.ocx 980K FXWebPlayer.exe 1.1M MFC71.dll 1.1M mfc80.dll 4.0K Microsoft.VC80.CRT.manifest 4.0K Microsoft.VC80.MFC.manifest 488K msvcp71.dll 536K msvcp80.dll 340K msvcr71.dll 612K msvcr80.dll 932K npfxplanet.dll 4.0K packages.wu2 748K w2i.exe 4.0K wu2_uninstall.cfg 4.0K WuDescriptor.upd --- snip ---
It then proceeds to execute some script/config items which seems to be a custom installer engine.
'wu2_install.EN.cfg':
--- snip --- //Renombra el plugin Rename { From "$DEST\npfxplanet.dll" To "$DEST_npfxplanet.dll" }
Rename { From "$DEST\fxplanet.ocx" To "$DEST_fxplanet.ocx" }
//Copia los archivos Move { Source "$SRC\Data*.*" Destination "$DEST" } ... --- snip ---
The culprit (as already seen in trace log) is 'FO_MOVE' operation of 'SHFileOperation':
--- snip --- Wine-dbg>c Stopped on breakpoint 1 at 0x7e469c6f SHFileOperationA [/home/focht/projects/wine/wine.repo/src/dlls/shell32/shlfileop.c:867] in shell32 867 { Wine-dbg>p *lpFileOp {hwnd=(nil), wFunc=0x1, pFrom="C:\users\focht\Temp{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\Data*.*", pTo="C:\users\Public\Application Data\FXWebPlayer", fFlags=0x614, fAnyOperationsAborted=0x5adc0000, hNameMappings=0x7e, lpszProgressTitle=*** invalid address 0x5ac00000 ***}
... Wine-dbg>bt Backtrace: =>0 0x7e46b304 move_files(lpFileOp=0x7e57e2, flFrom=0x7e5784, flTo=0x7e576c) [/home/focht/projects/wine/wine.repo/src/dlls/shell32/shlfileop.c:1404] in shell32 (0x007e57b8) 1 0x7e469da7 SHFileOperationA+0x137(lpFileOp=<couldn't compute location>) [/home/focht/projects/wine/wine.repo/src/dlls/shell32/shlfileop.c:887] in shell32 (0x007e5828) 2 0x0041140d in fxwebplayer (+0x1140c) (0x007e5914)
Wine-dbg>p *flFrom {feFiles=0x1429c0, num_alloc=0x20, dwNumFiles=0x13, bAnyFromWildcard=0x1, bAnyDirectories=0, bAnyDontExist=0}
Wine-dbg>p *flFrom->feFiles {attributes=0x20, szDirectory="C:\users\focht\Temp{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\Data", szFilename="7zr.exe", szFullPath="C:\users\focht\Temp{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\Data\7zr.exe", bFromWildcard=0x1, bFromRelative=0, bExists=0}
Wine-dbg>p *flTo {feFiles=0x144750, num_alloc=0x20, dwNumFiles=0x1, bAnyFromWildcard=0, bAnyDirectories=0x1, bAnyDontExist=0}
Wine-dbg>p *flTo->feFiles {attributes=0x10, szDirectory="C:\users\Public\Application Data", szFilename="FXWebPlayer", szFullPath="C:\users\Public\Application Data\FXWebPlayer", bFromWildcard=0, bFromRelative=0, bExists=0x1}
Wine-dbg>n 1422 if (!(lpFileOp->fFlags & FOF_MULTIDESTFILES) && Wine-dbg>n 1424 flFrom->dwNumFiles > flTo->dwNumFiles) Wine-dbg>n 1423 !flFrom->bAnyDirectories && Wine-dbg>n 1426 return ERROR_CANCELLED;
--- snip ---
Source: https://source.winehq.org/git/wine.git/blob/637bcd5de91bb1265b58c41af660749c...
--- snip --- 1402 /* the FO_MOVE operation */ 1403 static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom, const FILE_LIST *flTo) 1404 { 1405 DWORD i; 1406 INT mismatched = 0; 1407 const FILE_ENTRY *entryToMove; 1408 const FILE_ENTRY *fileDest; 1409 1410 if (!flFrom->dwNumFiles) 1411 return ERROR_SUCCESS; 1412 1413 if (!flTo->dwNumFiles) 1414 return ERROR_FILE_NOT_FOUND; 1415 1416 if (!(lpFileOp->fFlags & FOF_MULTIDESTFILES) && 1417 flTo->dwNumFiles > 1 && flFrom->dwNumFiles > 1) 1418 { 1419 return ERROR_CANCELLED; 1420 } 1421 1422 if (!(lpFileOp->fFlags & FOF_MULTIDESTFILES) && 1423 !flFrom->bAnyDirectories && 1424 flFrom->dwNumFiles > flTo->dwNumFiles) 1425 { 1426 return ERROR_CANCELLED; 1427 } ... --- snip ---
The code was introduced with this huge commit: https://source.winehq.org/git/wine.git/commitdiff/1be970d48572d6f988eeedb6e3... ("shell32: Reimplement a factored SHFileOperation.") several years ago.
Interesting it went unnoticed all the time. A wildcard move operation is not that uncommon.
$ sha1sum FXWebPlayer.exe 7ac6feccd6fd4438cf3d773b4a792c9d31458778 FXWebPlayer.exe
$ du -sh FXWebPlayer.exe 744K FXWebPlayer.exe
$ wine --version wine-1.7.51-102-ga7e294c
Regards