[Bug 29232] SimCity 4: installers fail to advance progress bar and also remains on 0.00% all the time (kernel32.CopyFileExW needs to support callback/progress routine)

wine-bugs at winehq.org wine-bugs at winehq.org
Sun May 13 11:03:40 CDT 2012


http://bugs.winehq.org/show_bug.cgi?id=29232

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |focht at gmx.net
          Component|-unknown                    |kernel32
            Summary|SimCity 4: installers fail  |SimCity 4: installers fail
                   |to advance progress bar and |to advance progress bar and
                   |also remains on 0.00% all   |also remains on 0.00% all
                   |the time                    |the time
                   |                            |(kernel32.CopyFileExW needs
                   |                            |to support
                   |                            |callback/progress routine)

--- Comment #7 from Anastasius Focht <focht at gmx.net> 2012-05-13 11:03:40 CDT ---
Hello Wylda,

good you brought this up.
I actually had this bug some months ago on my screen when I worked on the copy
protection part (SafeDisc 2.x) but it fell out of my queue ...

The reason for progress bar not updating is Wine not supporting copy progress
callback.

CopyFileExA,W and MoveFileWithProgressA/W

The installer calls CopyFileExA with a callback and user pointer and expects it
to be called to synchronize it's user interface.

--- snip ---
002b:Call KERNEL32.CopyFileExA(008cd70c "D:\\Support\\SimCity
4_EZ.exe",008cdd24 "C:\\Program Files\\Maxis\\SimCity 4\\Support\\SimCity
4_EZ.exe",0040ad60,008cde88,00441d2c,00000000) ret=0040ed8e 
...
002b:Ret  KERNEL32.CopyFileExA() retval=00000001 ret=0040ed8e
...
--- snip ---

Source:
http://source.winehq.org/git/wine.git/blob/b5a33dab886df6352011457932713ed321976bf6:/dlls/kernel32/path.c#l1022

--- snip ---
1022 BOOL WINAPI CopyFileExW(LPCWSTR sourceFilename, LPCWSTR destFilename,
1023                         LPPROGRESS_ROUTINE progressRoutine, LPVOID
appData,
1024                         LPBOOL cancelFlagPointer, DWORD copyFlags)
1025 {
1026     /*
1027      * Interpret the only flag that CopyFile can interpret.
1028      */
1029     return CopyFileW(sourceFilename, destFilename, (copyFlags &
COPY_FILE_FAIL_IF_EXISTS) != 0);
1030 }
--- snip ---

To verify my hypothesis I did a small short-circuit implementation of progress
callback in CopyFileExW.

I added a call of user supplied callback *after* CopyFileW(), supplying source
file size as total and transferred size and filled additional parameters with
sane values.
This call fixed the user interface issue.
The progress bar advanced and the "percentage" static control was properly
updated.

I encountered more installers with this problem, maybe when I remember them
I'll add them here.

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list