http://bugs.winehq.org/show_bug.cgi?id=30385
Bug #: 30385 Summary: Windows Live Essentials 2011 web installer fails to download packages in background (shell32.SHGetKnownFolderPath missing support for KF_FLAG_DEFAULT_PATH) Product: Wine Version: 1.5.1 Platform: x86 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: shell32 AssignedTo: wine-bugs@winehq.org ReportedBy: focht@gmx.net Classification: Unclassified
Hello,
installer log file:
--- snip --- ... Downloader :00000029 (04/08/2012 17:22:39.783) Manager is removing file transfer "Bingbar" from the queue. PkgDownload :00000028 (04/08/2012 17:22:39.783) Download of 'Bingbar' finished successfully. Downloader :00000028 (04/08/2012 17:22:39.783) Completing Request "Bingbar". Cert :00000028 (04/08/2012 17:22:39.834) Verifying signature of file=[C:\users\Public\Application Data\Microsoft\WLSetup\wlt6449.tmp]... Cert :00000028 (04/08/2012 17:22:39.865) Verifying signature of file=[C:\users\Public\Application Data\Microsoft\WLSetup\wlt6449.tmp]... !ERROR! :00000028 (04/08/2012 17:22:40) SOURCE=Decomp, CODE=0x80070057 Leaving ExtractCabFileOutOfXSFile() !ERROR! :00000028 (04/08/2012 17:22:40) SOURCE=Decomp, CODE=0x80070057 Leaving ExtractCabFileOutOfXSCabFile() SecureCache :00000028 (04/08/2012 17:22:40.013) AddPackage(): Deleting file 'C:\users\Public\Application Data\Microsoft\WLSetup\wlt6449.tmp' !ERROR! :00000028 (04/08/2012 17:22:40) SOURCE=SecureCache, CODE=0x80070057 Leaving AddPackage() !ERROR! :00000028 (04/08/2012 17:22:40) SOURCE=PkgDownload, CODE=0x80070057 leaving AddPackageToCache !ERROR! :00000028 (04/08/2012 17:22:40) SOURCE=PkgDownload, CODE=0x80070057 Download 'Bingbar' completed with an error (OnDownloadFinished), _fBackground=0 Task :00000028 (04/08/2012 17:22:40.030) Task(00642F88) ignoring failure 0x80070057 for this task TaskThread :00000028 (04/08/2012 17:22:40.030) TaskThread(00581D38): Incrementing task completed counter for 'OnTaskComplete', Task(00642F88) PackageDownloadTask Bingbar TaskThread :00000028 (04/08/2012 17:22:40.030) TaskThread(00581D38): OnTaskComplete() releasing semaphore for Task(00642F88) PackageDownloadTask Bingbar Task :00000028 (04/08/2012 17:22:40.040) Task(00642F88) completed result=0x1 Engine :0000002E (04/08/2012 17:22:40.040) Overall result = 0x40690 PkgDownload :00000028 (04/08/2012 17:22:40.040) ETW: TraceDownloadState_End - Bing Bar ... --- snip ---
The reason is this trace log part:
--- snip --- 002b:Call shell32.SHGetKnownFolderPath(004220f0,00008400,00000000,014ad984) ret=004567ca 002b:fixme:shell:SHGetKnownFolderPath flags 0x00008400 not supported 002b:Ret shell32.SHGetKnownFolderPath() retval=80070057 ret=004567ca 002b:Call shlwapi.PathFileExistsW(00000000) ret=00456e58 002b:Ret shlwapi.PathFileExistsW() retval=00000000 ret=00456e58 ... --- snip ---
0x8400 = KF_FLAG_CREATE | KF_FLAG_DEFAULT_PATH
Wine doesn't support KF_FLAG_DEFAULT_PATH hence SHGetKnownFolderPath() failure causes downloaded temp files to get deleted again.
MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/dd378447%28v=vs.85%2...
Source: http://source.winehq.org/git/wine.git/blob/798beb2cb8d07cd76494cd878ecef711c...
--- snip --- 3036 HRESULT WINAPI SHGetKnownFolderPath(REFKNOWNFOLDERID rfid, DWORD flags, HANDLE token, PWSTR *path) 3037 { 3038 HRESULT hr; 3039 WCHAR folder[MAX_PATH]; 3040 int index = csidl_from_id( rfid ); 3041 3042 TRACE("%s, 0x%08x, %p, %p\n", debugstr_guid(rfid), flags, token, path); 3043 3044 *path = NULL; 3045 3046 if (index < 0) 3047 return HRESULT_FROM_WIN32( ERROR_FILE_NOT_FOUND ); 3048 3049 if (flags & KF_FLAG_CREATE) 3050 index |= CSIDL_FLAG_CREATE; 3051 3052 if (flags & KF_FLAG_DONT_VERIFY) 3053 index |= CSIDL_FLAG_DONT_VERIFY; 3054 3055 if (flags & KF_FLAG_NO_ALIAS) 3056 index |= CSIDL_FLAG_NO_ALIAS; 3057 3058 if (flags & KF_FLAG_INIT) 3059 index |= CSIDL_FLAG_PER_USER_INIT; 3060 3061 if (flags & ~(KF_FLAG_CREATE|KF_FLAG_DONT_VERIFY|KF_FLAG_NO_ALIAS|KF_FLAG_INIT)) 3062 { 3063 FIXME("flags 0x%08x not supported\n", flags); 3064 return E_INVALIDARG; 3065 } 3066 3067 hr = SHGetFolderPathW( NULL, index, token, 0, folder ); 3068 if (SUCCEEDED(hr)) 3069 { 3070 *path = CoTaskMemAlloc( (strlenW( folder ) + 1) * sizeof(WCHAR) ); 3071 if (!*path) 3072 return E_OUTOFMEMORY; 3073 strcpyW( *path, folder ); 3074 } 3075 return hr; 3076 } --- snip ---
Regards