[Bug 29875] MS Works 9.0 can't install (infinite waiting for estimating time)

wine-bugs at winehq.org wine-bugs at winehq.org
Fri Mar 21 18:16:38 CDT 2014


https://bugs.winehq.org/show_bug.cgi?id=29875

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |download
             Status|UNCONFIRMED                 |RESOLVED
                URL|                            |http://azcdn01.digitalriver
                   |                            |content.net/msoffice/pub/X1
                   |                            |4-02658/X14-02658.exe
                 CC|                            |focht at gmx.net
         Resolution|---                         |FIXED
            Summary|MS Works 9 can't install    |MS Works 9.0 can't install
                   |(infinite waiting for       |(infinite waiting for
                   |estimating time)            |estimating time)

--- Comment #7 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

found the official download for 'Microsoft Works 9.0' here:

http://azcdn01.digitalrivercontent.net/msoffice/pub/X14-02658/X14-02658.exe

The installer works fine for me, resolving fixed.

@Austin:

--- snip ---
err:msi:ACTION_CallDllFunction Custom action
(L"C:\\users\\focht\\Temp\\msid20.tmp":L"SetXMLReserveDiskProperty") caused a
page fault: c0000005
--- snip ---

That's actually a stupid bug in the installer itself.

The custom action 'SetXMLReserveDiskProperty' reads msxml6.dll version resource
in order to check if an update is needed or not.

--- snip ---
$ WINEDEBUG=+tid,+seh,+relay,+msi,+ver wine X14-02658.exe >>log.txt 2>&1
...
0043:Call KERNEL32.LoadLibraryW(001c6aac
L"C:\\users\\focht\\Temp\\msib7e6.tmp") ret=7e53386f
0043:Ret  KERNEL32.LoadLibraryW() retval=10000000 ret=7e53386f
...
0043:Call KERNEL32.GetProcAddress(10000000,00695dd0
"SetXMLReserveDiskProperty") ret=7e53390f
0043:Ret  KERNEL32.GetProcAddress() retval=10016e60 ret=7e53390f 
...
0043:Call version.GetFileVersionInfoSizeA(00760f18 "msxml6.dll",012ee838)
ret=10016cee 
...
0043:Ret  version.GetFileVersionInfoSizeA() retval=000006fc ret=10016cee
0043:Call ntdll.RtlAllocateHeap(00760000,00000000,000006fc) ret=10039864
0043:Ret  ntdll.RtlAllocateHeap() retval=00764188 ret=10039864
0043:Call KERNEL32.GetProcAddress(7eae0000,1007d0a0 "GetFileVersionInfoA")
ret=10017353
0043:Ret  KERNEL32.GetProcAddress() retval=7eae3ad4 ret=10017353
0043:Call version.GetFileVersionInfoA(00760f18
"msxml6.dll",00000000,000006fc,00764188) ret=10016d32 
...
0043:Ret  version.GetFileVersionInfoA() retval=00000001 ret=10016d32
0043:Call KERNEL32.GetProcAddress(7eae0000,1007d08e "VerQueryValueA")
ret=10017353
0043:Ret  KERNEL32.GetProcAddress() retval=7eae3b94 ret=10017353
0043:Call version.VerQueryValueA(00764188,1006d0fc "\\",012ee840,012ee844)
ret=10016d50
0043:Call KERNEL32.MultiByteToWideChar(00000000,00000000,1006d0fc
"\\",ffffffff,00000000,00000000) ret=7eae6fe6
0043:Ret  KERNEL32.MultiByteToWideChar() retval=00000002 ret=7eae6fe6
0043:Call ntdll.RtlAllocateHeap(00110000,00000000,00000004) ret=7eae7015
0043:Ret  ntdll.RtlAllocateHeap() retval=00695dd0 ret=7eae7015
0043:Call KERNEL32.MultiByteToWideChar(00000000,00000000,1006d0fc
"\\",ffffffff,00695dd0,00000002) ret=7eae705c
0043:Ret  KERNEL32.MultiByteToWideChar() retval=00000002 ret=7eae705c
0043:Call ntdll.RtlFreeHeap(00110000,00000000,00695dd0) ret=7eae70ae
0043:Ret  ntdll.RtlFreeHeap() retval=00000001 ret=7eae70ae
0043:Ret  version.VerQueryValueA() retval=00000001 ret=10016d50 
...
--- snip ---

Version needs to be >= 6.00.x.x which Wine matches.

After verification it logs the result using msi 

Msi record with 4 fields gets created (to take the version number: aa.bb.cc.dd)

--- snip ---
0043:Call msi.MsiCreateRecord(00000004) ret=1000a753
...
0043:Ret  msi.MsiCreateRecord() retval=00000003 ret=1000a753
--- snip ---

Setting the format string field of the record (implicit, not included in field
count for MsiCreateRecord):

--- snip ---
0043:Call msi.MsiRecordSetStringA(00000003,00000000,012edfc8 "<WORKS CA LOG>
xml is already installed. Ver.[1].[2].[3].[4]") ret=1000a7c0
0043:Call KERNEL32.MultiByteToWideChar(00000000,00000000,012edfc8 "<WORKS CA
LOG> xml is already installed. Ver.[1].[2].[3].[4]",ffffffff,00000000,00000000)
ret=7e5730f1
0043:Ret  KERNEL32.MultiByteToWideChar() retval=0000003d ret=7e5730f1
0043:Call ntdll.RtlAllocateHeap(00110000,00000000,0000007a) ret=7e57306d
0043:Ret  ntdll.RtlAllocateHeap() retval=0066c480 ret=7e57306d
0043:Call KERNEL32.MultiByteToWideChar(00000000,00000000,012edfc8 "<WORKS CA
LOG> xml is already installed. Ver.[1].[2].[3].[4]",ffffffff,0066c480,0000003d)
ret=7e57313e
0043:Ret  KERNEL32.MultiByteToWideChar() retval=0000003d ret=7e57313e
0043:Call ntdll.RtlAllocateHeap(00110000,00000000,0000007a) ret=7e57306d
0043:Ret  ntdll.RtlAllocateHeap() retval=00993580 ret=7e57306d
0043:Call ntdll.RtlFreeHeap(00110000,00000000,0066c480) ret=7e57309e
0043:Ret  ntdll.RtlFreeHeap() retval=00000001 ret=7e57309e
0043:Ret  msi.MsiRecordSetStringA() retval=00000000 ret=1000a7c0 
--- snip ---

Set the first field of the record (6 = major version of msxml6.dll):

--- snip ---
0043:Call msi.MsiRecordSetStringA(00000003,00000001,00000006) ret=1000a7d8
0043:Call
KERNEL32.MultiByteToWideChar(00000000,00000000,00000006,ffffffff,00000000,00000000)
ret=7e5730f1
0043:trace:seh:raise_exception code=c0000005 flags=0 addr=0xf73befc6
ip=f73befc6 tid=0043
0043:trace:seh:raise_exception  info[0]=00000000
0043:trace:seh:raise_exception  info[1]=00000006
0043:trace:seh:raise_exception  eax=00000000 ebx=7b8ba000 ecx=00000006
edx=00000018 esi=012edf08 edi=00000006
0043:trace:seh:raise_exception  ebp=012edea8 esp=012ede34 cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00210283
0043:trace:seh:call_stack_handlers calling handler at 0x10063fc8 code=c0000005
flags=0 
...
0043:err:msi:ACTION_CallDllFunction Custom action
(L"C:\\users\\focht\\Temp\\msib7e6.tmp":L"SetXMLReserveDiskProperty") caused a
page fault: c0000005 
--- snip ---

Guess ... some genius forgot that VerQueryValueA() ought to return binary
values in this case, which causes the page fault in MsiRecordSetStringA().
The page fault is caught hence that mishap proves harmless in the end.

$ sha1sum X14-02658.exe 
056fb46da532b0bac1a2504b5bfc527debde0535  X14-02658.exe

$ du -sh X14-02658.exe 
248M    X14-02658.exe

$ wine --version
wine-1.7.15

Regards

-- 
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