[Bug 24611] Install Shield fails on 64bit multilib wine if WINEPREFIX was created by 64bit wine

wine-bugs at winehq.org wine-bugs at winehq.org
Sun Apr 22 15:31:23 CDT 2012


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

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |focht at gmx.net

--- Comment #14 from Anastasius Focht <focht at gmx.net> 2012-04-22 15:31:23 CDT ---
Hello,

confirming. The problem seems to be missing typelib/interface data in 64 bits
registry.
The installer itself is 32 bits but the out-of-process COM server runs as 64
bit process and they talk to each other using standard marshaller.

--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files (x86)/Common
Files/InstallShield/Professional/RunTime
...
$ ls -l
total 204
drwxrwxr-x. 3 focht focht   4096 Apr  4 22:56 11
-rw-rw-r--. 1 focht focht  38719 Feb  7  2006 iKernel.rgs
-rw-rw-r--. 1 focht focht    570 Dec 19  2005 ISBEW64.rgs
-rw-rw-r--. 1 focht focht   3368 Nov 13  2005 ISBEW64.tlb
-rw-rw-r--. 1 focht focht 121032 Nov 13  2005 IsProBE.tlb
-rw-rw-r--. 1 focht focht  32768 Feb  7  2006 Objectps.dll
...
--- snip ---

ISBEW64.rgs:

--- snip ---
HKCR
{
    NoRemove Interface
    {
        {7871BFAD-DAD5-402F-9007-2593E9A07532} = s 'IISBEW64Utils'
        {
            ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
            ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
            TypeLib = s '{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}'
            {
                val Version = s '1.0'
            }
        }
    }
    NoRemove TypeLib
    {
        {DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}
        {
            1.0 = s 'ISENG64Lib'
            {
                0
                {
                    win32 = s '%MODULEPATH%\ISBEW64.tlb'
                }
                FLAGS = s '0'
                HELPDIR = s '%MODULEPATH%'
            }
        }
    }
}
--- snip ---

Registration of typelib(s):

--- snip ---
0024:Starting process L"Z:\\home\\focht\\Downloads\\titan\\setup.exe"
(entryproc=0x40ce22) 
...
0024:Call KERNEL32.CreateProcessA(00000000,0041f1b0
"Z:\\home\\focht\\Downloads\\titan\\setup.exe -deleter
",00000000,00000000,00000000,00000000,00000000,00000000,0032f108,0032f174)
ret=00407a73
...
0026:Call KERNEL32.__wine_kernel_init() ret=7bc530d2
0024:Ret  KERNEL32.CreateProcessA() retval=00000001 ret=00407a73 
...
0026:Call oleaut32.RegisterTypeLib(00157308,00156a5c L"C:\\Program Files
(x86)\\Common
Files\\InstallShield\\Professional\\RunTime\\ISBEW64.tlb",00000000)
ret=1001aec9
...
0026:Call advapi32.RegCreateKeyExW(80000000,0033d9d0
L"Typelib\\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}\\1.0",00000000,00000000,00000000,00020006,00000000,0033d9ac,00000000)
ret=7e47b1d0
0026:Ret  advapi32.RegCreateKeyExW() retval=00000000 ret=7e47b1d0 
...
0026:Call advapi32.RegCreateKeyExW(80000000,0033d9d0
L"Interface\\{7871BFAD-DAD5-402F-9007-2593E9A07532}",00000000,00000000,00000000,00020006,00000000,0033d9ac,00000000)
ret=7e47bb8f
0026:Ret  advapi32.RegCreateKeyExW() retval=00000000 ret=7e47bb8f 
...
0026:Ret  oleaut32.RegisterTypeLib() retval=00000000 ret=1001aec9 
...
--- snip ---

The type library got registered in 32 bits part (wine64 regedit):

--- snip ---
REGEDIT4

[HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}]

[HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}\1.0]
@="ISENG64Lib"

[HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}\1.0\0]

[HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}\1.0\0\win32]
@="C:\\Program Files (x86)\\Common
Files\\InstallShield\\Professional\\RunTime\\ISBEW64.tlb"

[HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}\1.0\FLAGS]
@="0"

[HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}\1.0\HELPDIR]
@="C:\\Program Files (x86)\\Common Files\\InstallShield\\Professional\\RunTime"
--- snip ---

--- snip ---
REGEDIT4

[HKEY_CLASSES_ROOT\Wow6432Node\Interface\{7871BFAD-DAD5-402F-9007-2593E9A07532}]
@="IISBEW64Utils"

[HKEY_CLASSES_ROOT\Wow6432Node\Interface\{7871BFAD-DAD5-402F-9007-2593E9A07532}\ProxyStubClsid]
@="{00020424-0000-0000-C000-000000000046}"

[HKEY_CLASSES_ROOT\Wow6432Node\Interface\{7871BFAD-DAD5-402F-9007-2593E9A07532}\ProxyStubClsid32]
@="{00020424-0000-0000-C000-000000000046}"

[HKEY_CLASSES_ROOT\Wow6432Node\Interface\{7871BFAD-DAD5-402F-9007-2593E9A07532}\TypeLib]
@="{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}"
"Version"="1.0"
--- snip ---

64-bits registry for "TypeLib":

--- snip ---
REGEDIT4

[HKEY_CLASSES_ROOT\Typelib\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}]

[HKEY_CLASSES_ROOT\Typelib\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}\1.0]
@="ISENG64Lib"

[HKEY_CLASSES_ROOT\Typelib\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}\1.0\0]

[HKEY_CLASSES_ROOT\Typelib\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}\1.0\0\win32]
@="C:\\Program Files (x86)\\Common
Files\\InstallShield\\Professional\\RunTime\\ISBEW64.tlb"

[HKEY_CLASSES_ROOT\Typelib\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}\1.0\FLAGS]
@="0"

[HKEY_CLASSES_ROOT\Typelib\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}\1.0\HELPDIR]
@="C:\\Program Files (x86)\\Common Files\\InstallShield\\Professional\\RunTime"
--- snip --- 

64-bits registry for "Interface": key not present

The 64-bit InstallShield engine trying to find typelib data for creating proxy:

--- snip ---
0026:Call KERNEL32.CreateProcessA(00000000,0033d28c "C:\\Program Files
(x86)\\Common
Files\\InstallShield\\Professional\\RunTime\\11\\50\\Intel32\\ISBEW64.exe
{DD19BC0E-827B-48CE-9D16-F7917E8B486C}:{9EF36F7A-EF7B-4BC6-92C4-F5B242B7CF88}",00000000,00000000,00000000,00000000,00000000,00000000,0033d68c,0033d6e0)
ret=00913327
...
0029:Call KERNEL32.__wine_kernel_init() ret=7f4ffe6d163e
0026:Ret  KERNEL32.CreateProcessA() retval=00000001 ret=00913327 
...
0029:trace:ole:CoGetPSClsid () riid={7871bfad-dad5-402f-9007-2593e9a07532},
pclsid=0x23e010
0029:Call advapi32.RegOpenKeyExW(ffffffff80000000,0023de30
L"Interface\\{7871BFAD-DAD5-402F-9007-2593E9A07532}\\ProxyStubClsid32",00000000,00020019,0023ddd0)
ret=7f4ff67185f2
003c:Ret  user32.PostMessageW() retval=00000001 ret=7f4ff6768944
003c:Call KERNEL32.WaitForSingleObject(00000070,ffffffff) ret=7f4ff6768960
0029:Ret  advapi32.RegOpenKeyExW() retval=00000002 ret=7f4ff67185f2
0029:warn:ole:CoGetPSClsid No PSFactoryBuffer object is registered for IID
{7871bfad-dad5-402f-9007-2593e9a07532}
0029:err:ole:marshal_object couldn't get IPSFactory buffer for interface
{7871bfad-dad5-402f-9007-2593e9a07532} 
...
--- snip ---

If I manually import/add "{7871BFAD-DAD5-402F-9007-2593E9A07532}" interface
from 32 to 64 bit registry:

--- snip ---
0029:trace:ole:CoGetPSClsid () riid={7871bfad-dad5-402f-9007-2593e9a07532},
pclsid=0x23e010
0029:Call advapi32.RegOpenKeyExW(ffffffff80000000,0023de30
L"Interface\\{7871BFAD-DAD5-402F-9007-2593E9A07532}\\ProxyStubClsid32",00000000,00020019,0023ddd0)
ret=7fe23126c5f2 
...
0029:Ret  advapi32.RegOpenKeyExW() retval=00000000 ret=7fe23126c5f2 
...
0029:trace:ole:CoGetPSClsid () Returning
CLSID={00020424-0000-0000-c000-000000000046}
0029:trace:ole:CoGetClassObject CLSID:
{00020424-0000-0000-c000-000000000046},IID:
{d5f569d0-593b-101a-b569-08002b2dbf7a}
...
0029:Call advapi32.RegOpenKeyExW(ffffffff80000000,0023ddb0
L"CLSID\\{00020424-0000-0000-C000-000000000046}",00000000,00020019,0023dda8)
ret=7fe23126bbe5 
...
0029:Ret  advapi32.RegOpenKeyExW() retval=00000000 ret=7fe23126bbe5 
...
0029:trace:ole:PSFacBuf_CreateStub
({7871bfad-dad5-402f-9007-2593e9a07532},0x2c4540,0x23e0a0)
0029:Call advapi32.RegOpenKeyA(ffffffff80000000,0023db40
"Interface\\{7871bfad-dad5-402f-9007-2593e9a07532}\\Typelib",0023de68)
ret=7fe230c41fc5
0029:Ret  advapi32.RegOpenKeyA() retval=00000000 ret=7fe230c41fc5
0029:Call
advapi32.RegQueryValueExA(00000074,00000000,00000000,0023d7a4,0023dda0,0023d7ac)
ret=7fe230c4206a
0029:Ret  advapi32.RegQueryValueExA() retval=00000000 ret=7fe230c4206a
0029:Call advapi32.RegQueryValueExA(00000074,7fe230d31bb5
"Version",00000000,0023d7a4,0023dad0,0023d7a8) ret=7fe230c42116
0029:Ret  advapi32.RegQueryValueExA() retval=00000000 ret=7fe230c42116
0029:Call advapi32.RegCloseKey(00000074) ret=7fe230c42189
0029:Ret  advapi32.RegCloseKey() retval=00000000 ret=7fe230c42189
0029:Call advapi32.RegQueryValueA(ffffffff80000000,0023dc70
"Typelib\\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}\\1.0\\0\\win64",0023d9c0,0023d7a0)
ret=7fe230c421ec
0029:Ret  advapi32.RegQueryValueA() retval=00000002 ret=7fe230c421ec
0029:err:ole:_get_typeinfo_for_iid Could not get typelib fn?
0029:err:ole:PSFacBuf_CreateStub No typeinfo for
{7871bfad-dad5-402f-9007-2593e9a07532}?
0029:err:ole:marshal_object Failed to create an IRpcStubBuffer from IPSFactory
for {7871bfad-dad5-402f-9007-2593e9a07532} with error 0x80004005 
...
--- snip ---

It wants the "win64" key. Adding it manually:

--- snip ---
REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Classes\Typelib\{DE7D81D8-FD4A-456B-9A5E-6CED95B57D91}\1.0\0\win64]
@="C:\\Program Files (x86)\\Common
Files\\InstallShield\\Professional\\RunTime\\ISBEW64.tlb"
--- snip ---

Now the proxy gets created and both - the 32 bit setup and the 64 bit installer
engine can talk to each other.
The demo installs successfully.

The "TypeLib" data is synchronized between the 64-bit and 32-bit views of the
registry.
"Interface" not.

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