http://bugs.winehq.org/show_bug.cgi?id=15887
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |focht@gmx.net
--- Comment #9 from Anastasius Focht focht@gmx.net 2009-01-18 06:34:56 --- Hello,
just experienced the same issue while testing Microsoft Visual Studio Express Versions with some Frameworks and SDKs installed prior into WINEPREFIX.
--- snip --- err:msi:msi_cabextract FDICopy failed err:msi:ACTION_InstallFiles Failed to extract cabinet: L"vcsetup1.cab" err:msi:ITERATE_Actions Execution halted, action L"InstallFinalize" returned 1627 --- snip ---
Relevant trace log:
--- snip --- 0028:trace:msi:msi_check_file_install_states file L"FL_ATLWithCRT_vcstyle_____X86.3643236F_FC70_11D3_A536_0090278A1BB8" is named L"ATLWithCRT.vsprops" 0028:trace:msi:msi_check_file_install_states file L"FL_ATLWithCRT_vcstyle_____X86.3643236F_FC70_11D3_A536_0090278A1BB8" resolves to L"C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults\ATLWithCRT.vsprops" ... 0028:trace:msi:cabinet_copy_file extracting L"C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults\ATLWithCRT.vsprops" 0028:Call KERNEL32.CreateFileW(01be2290 L"C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults\ATLWithCRT.vsprops",c0000000,00000000,00000000,00000002,00000001,00000000) ret=60b9c779 0028:Ret KERNEL32.CreateFileW() retval=ffffffff ret=60b9c779 0028:Call KERNEL32.GetFileAttributesW(01be2290 L"C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults\ATLWithCRT.vsprops") ret=60b9c790 0028:Ret KERNEL32.GetFileAttributesW() retval=00000021 ret=60b9c790 ... 0028:err:msi:msi_cabextract FDICopy failed 0028:trace:cabinet:FDIDestroy (hfdi == ^0x122e2d8) 0028:err:msi:ACTION_InstallFiles Failed to extract cabinet: L"vcsetup1.cab" 0028:err:msi:ITERATE_Actions Execution halted, action L"InstallFinalize" returned 1627 ... 0028:Call KERNEL32.GetLastError() ret=50245c4b 0028:Ret KERNEL32.GetLastError() retval=00000005 ret=50245c4b --- snip ---
Manually "cabextract" just to be sure:
--- snip --- $ cabextract vcsetup1.cab ... $ ls -lsa FL_ATLWithCRT* 4 -rw-rw-r-- 1 focht focht 219 2005-09-23 00:41 FL_ATLWithCRT_vcstyle_____X86.3643236F_FC70_11D3_A536_0090278A1BB8 --- snip ---
Dumping directory:
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/Microsoft Visual Studio 8/VC/VCProjectDefaults ]$ ls -lsa total 128 4 drwxrwxr-x 2 focht focht 4096 2009-01-18 12:00 . 4 drwxrwxr-x 13 focht focht 4096 2009-01-18 11:59 .. 4 -r--r--r-- 1 focht focht 235 2005-09-23 01:41 ATLDynamic.vsprops 4 -r--r--r-- 1 focht focht 285 2005-09-23 01:41 ATLNoCRT.vsprops 4 -r--r--r-- 1 focht focht 246 2005-09-23 01:41 ATLStatic.vsprops 4 -r--r--r-- 1 focht focht 219 2005-09-23 01:41 ATLWithCRT.vsprops ... --- snip ---
Ah, sweet read-only issue again.
Although msi's cabinet_copy_file() ensures that newly created (extracted cabinet) files have sane attributes set, it fails to handle the case when the file to be replaced is already present with read-only attributes - which leads to failure when trying to re-create.
--- snip dlls/msi/media.c --- static INT_PTR cabinet_copy_file(FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pfdin) { MSICABDATA *data = pfdin->pv; HANDLE handle = 0; LPWSTR path = NULL; DWORD attrs;
data->curfile = strdupAtoW(pfdin->psz1); if (!data->cb(data->package, data->curfile, MSICABEXTRACT_BEGINEXTRACT, &path, &attrs, data->user)) goto done;
TRACE("extracting %s\n", debugstr_w(path));
attrs = attrs & (FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM); if (!attrs) attrs = FILE_ATTRIBUTE_NORMAL;
handle = CreateFileW(path, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, attrs, NULL); if (handle == INVALID_HANDLE_VALUE) { if (GetFileAttributesW(path) == INVALID_FILE_ATTRIBUTES) ERR("failed to create %s (error %d)\n", debugstr_w(path), GetLastError());
goto done; }
done: msi_free(path);
return (INT_PTR)handle; } --- snip dlls/msi/media.c ---
Adjusting the file attributes of existing files to force the successful re-creation fixes the problem.
Regards