InstallShield

From Wine-Wiki.org
(Redirected from Wine InstallShield)
Jump to: navigation, search
This article is part of the HOWTO series.
Installing Wine Business Games Internet Multimedia System and Utilities
Education Other


Warning: This HOWTO comes with no explicit or implicit warranty whatsoever. Use at you own risk!



Contents

InstallShield Information

The process of software installation on Windows is dominated by the Macrovision program called 'Installshield'. For a long time, InstallShield was a tricky step with Wine as it makes use of DCOM. Thanks to Codeweavers and a few other developers, things have improved. Now Bugzilla reports with InstallShield seem to be few.


[Jun 05] R. Shearman and M. Hearn are working on InstallShield, and they were asked if they wanted any assistance. R. Shearman: No one should feel that they can't hack on InstallShield. However, if anyone has an InstallShield installer that doesn't work they send me links to free demos and I will do my best to get them installing. If there isn't a free demo, then you can also email me compressed "+ole,+tid" logs and I will look at them too and advise on the problem if I can. Having said that, I don't promise that I will get your InstallShield installer working next week or even next month, but it is a long term goal of mine and CodeWeavers that every game or application should install. Wine Archives

M. Meissner: [Sept05] Make sure no other InstallShield instances are running before starting the install. ([use] killall wine-preloader [to be sure])Wine Archive

Codeweavers challenge
J. White [July 05 Made an announcement to the list]:You may have noticed Rob submitting a long string of OLE patches. That is formally the last set of 'hard work' we planned to do as part of our work on our 5.0 release. Now we just have to do the 'easy part' - stabilizing for release <g>.

The big picture items included the window manager rewrite,the OLE/COM work, and the work on MSI. I'd like to take a minute to thank all the people, both inside and outside CodeWeavers, that helped to work on these projects.

I think that these tasks represent a fairly signficant milestone for Wine - we seem to have enough working that Alexandre is willing to contemplate a non alpha release; that's a pretty big deal. (Another 11 years, and maybe 1.0 will actually happen :-/).

At any rate, this work has been a bit hard on us, because it's largely been under the hood, unsexy work that tends to cause regressions. So from a customer perspective, the rational analysis is: "you did all that work and now my windows don't scroll right? Morons!"

But one of the key benefits that the OLE/MSI work gives us, in particular, is that we can now intelligently debug issues with COM, which was always a nightmare to debug before. And, as you all probably know, many installers rely heavily on both COM and MSI to do their work.

So we now believe that many, many more installers will 'just work' than before. And we further believe that those that don't work can be fixed in a much more straightforward way. Thus, I am now making good on my promise to lock Rob and Aric in a room and make installers go. We've announced a formal, CrossOver based program over on our web site. However, I wanted to let you know that we'll do the same on an informal basis, particularly for known Wine developers. I'm hoping that as a result of this work we'll soon be able to claim with a straight face: "Most things install."

So, if you have an app that doesn't install, post a message to wine-devel, and let's see if we can't make some lemonade and have a party!


Because Wine can often complete software installations without needing native DCOM with it's restrictive license, it is best to first try installing without using a Microsoft Windows' version of DCOM. If the application database mentions DCOM issues for your favourite software, there are some tricks which can help you to pass the installation process dominated by InstallShield, which involve dlls from the native MS Windows DCOM and sometimes a COMCTL32.DLL.

Obtaining DCOM98

Before installing DCom, check that you need it. As of Dec 09 it is very, very rarely needed and now often just breaks things. Do not install it unless you absolutely have to and then use a separate WINEPREFIX as these days dcom can break a lot of programs that currently work on wine. One user asked [Apr 07]: Is it necessary install dcom with wine release 0.9.31-1?

Another user replied: It's not necessary (and usually bad) to install any Microsoft components to use wine unless your application specifically needs that component.

Update 2008: Winetricks is now probably the best way and possible the only way for users to install Dcom98.


Several links to download Dcom98 are listed below. All have license agreements that require careful reading. Dcom98 is provided as a free download from Microsoft Windows.

Further Reading

Obtaining COMCTL32.DLL

in March 2006 comctl32 was added to the list of always builtin dlls. V Lipatov wrote: [as of March] There is [still] broken code in WINE's comctl32 realization (in treeview/listview code) and we need to override builtin dll by native for get differences... M McCormack: You can still do that using WINEDLLOVERRIDES=comctl32=n, so it doesn't impede testing. wine archive

Ed. Note the above example is using a Win XP dll. Using a Windows98 comctl32.dll would also require its companion, the commctrl.dll to be set as native using the command line. eg. WINEDLLOVERRIDES="comctl32=n;commctrl=n" wine [My program's name]

Several Options for obtaining comctl32.dll are listed below. All have license agreements that require careful reading.


Further Reading

InstallShield tricks with native DCOM and COMCTL32

If the InstallShield program fails, commonly a few DLLs maybe needed for the install. With wine versions 0.9 or greater try using the comctl32.dll and commctrl.dll pair. Copy these dlls across to the fake windows/system32 folder and open up a terminal window and write:

WINEDLLOVERRIDES="comctl32=n;commctrl=n" wine (path to setup.exe)/setup.exe

Occasionally despite the recent progress made with dcom and wine, you will still need to try with dcom98.

Using native DCOM run winecfg and set the windows version to Win98. Then open a terminal window and write:

$ WINEDLLOVERRIDES="ole32,oleaut32,rpcrt4=n" wine (path to setup.exe)/setup.exe


With the july 2005 release, for one troublesome program this method was successfull

$ WINEDLLOVERRIDES="ole32=n,b;oleaut32=n,b;rpcrt4=n,b" wine (path to setup.exe)/setup.exe


While great strides have been made with the Wine implementation of comctl32.dll, with wine versions less than 0.9, if the InstallShield installation gives this error msg

Explorer 4 or greater is required

currently the only workaround is to specify the native Microsoft Comctl32.dll using WINDLLOVERRIDES. This means the install may work without DCOM, so try using only the native comctl32. With an XP comctl32.dll:

A. Mohr [Aug 05]: [You must use] either* both commctrl.dll and comctl32.dll as native *or* both commctrl.dll and comctl32.dll as builtin. Otherwise it *will* fail, with a thunk error similar [..].

McCormack [Aug 05]: You shouldn't need to use the native comctl32 any longer. Please update your dll overrides to "comctl32" = "builtin". Wine's comctl32 implementation is almost complete. If there's bugs with the builtin comctl32 then please help us by reporting them rather than sweeping the problem under the carpet and using the native dll. [A patch was attached, correcting a problem with Dreamweaver] Wine Archive


Using native COMCTL32

for Wine versions less than 0.9.44 you can simple copy it across into your wine system32 directory and use. Keep in mind that there are quite a few versions of comctl32 around on different versions of windows and not all work the same.

$ WINEDLLOVERRIDES="comctl32=n" wine (path to setup.exe)/setup.exe

For Wine98 both comctl32 and commctrl are required as native:

WINEDLLOVERRIDES="comctl32=n;commctrl=n" wine (path to setup.exe)/setup.exe

But with Wine 0.9.44 and after it was noted in bug 9552 [Sept 07] apparently more is needed:

x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.0.0_none_deadbeef in ~/.wine/drive_c/windows/winsxs.

If the install fails or hangs, regretably DCOM may also be required. Using an XP comctrl32.dll

Using native DCOM and COMCTL32

$ WINEDLLOVERRIDES="comctl32=n;ole32=n;oleaut32=n;rpcrt4=n" wine (path to setup.exe)/setup.exe


Further Reading

Troubleshooting InstallShield

Current Status with Wine and InstallShield

Ed. Recently [Jun 06] now, many installshield programs will just install.

[Apr 2005] While you can use

WINEDLLOVERRIDES="ole32,oleaut32,rpcrt4=n,b"

R.Shearman [April 05] points out: This is not a good long-term solution since it requires a download from Microsoft. There are a number of issues with InstallShield currently [wine 20050310]. I had hoped that getting one working would get all working, but this doesn't seem to be the case from the current discussion on wine-devel. I am aware of 3 issues with ole32, 2 deadlocks and one error. The remaining issues appear to be with the typelib marshaler, which unfortunately lacks regression tests. Wine Archive Link

Ole Errors

A lot of these error messages have been fixed in the latest versions of wine. If you run into an Ole error, probably it is best to try an updated version of wine before trying anything else.

err:module:import_dll Library ole32.dll (which is needed by L"c:\\windows\\system32\\shlwapi.dll") not found
err:module:import_dll Library shlwapi.dll (which is needed by L"c: \\windows\\system32\\shell32.dll") not found 
err:module:import_dll Library SHELL32.dll (which is needed by L"Z:

S. Petreolle [Apr 06]: dont run wine as root. dont run wine as root ? dont run wine as root !! [...] I wouldnt give wine administrative priviledges, as it can access to / even if a drive hasnt been defined for it.

J. Hawkins: Assuming the next time you run as aregular user, have you copied native ole32.dll, oleaut32.dll and rpcrt4.dll to drive_c/windows/system32?


A user reported [Sept05]: I've been trying to get GTA: San Andreas, and Battlefield 2 running [...] they produce very similar output (ole fixmes).Both games will freeze at some point during the install.

R. Shearman: In newer InstallShields, there is a marshaled object that contains a function with a VT_PTR -> VT_USERDEFINED( TKIND_ENUM ). This should be treated as "int *", but is actually treated as "int". This is due to some broken logic in the typelib marshaler that is designed to fix the problem with VT_PTR -> VT_USERDEFINED( TKIND_INTERFACE ) -> "IUnknown *", but where we should dereference the pointer any more. We probably need to use the logic in ITypeInfo::Invoke to appropriately transform the soup of pointers and userdefined types into something we can use. I should also need to check what things are accepted in the native version. i.e. is VT_PTR -> VT_PTR -> VT_USERDEFINED( TKIND_ENUM ) supported? If so, that isn't representable by the VARIANT vt's, so we would need to treat it differently than the ITypeInfo::Invoke case.

This is a high priority for me as this one bug prevents a number of installers from working correctly. However, I'm in the middle of some other work at the moment, so I don't know when I'll get around to it.Wine Archive


Installshield is Slow
A user noted: I'm trying to perform a installation of FF8 with wine, but the installation is very slow.

M. Hearn: If this is an InstallShield it may be that our DCOM is not well optimised. Try using native DCOM and see if that speeds it up.wine archive


Full Screen
[Jun 06]An installer which blocks the whole screen may need to be run in a window. Use winecfg to set this.

Ikernel could not be copied to... This message usually means wine has not finished from the previous command or installation attempt and it may be a little stuck. Using a terminal window type wineserver -k to close wine and try again.


fixme:ole:RegisterTypeLib Registering non-oleautomation interface!

fixme:ole:RegisterTypeLib Registering non-oleautomation interface!
fixme:ole:ITypeInfo_fnRelease destroy child objects
...
fixme:ole:ITypeInfo_fnRelease destroy child objects
fixme:sync:SetNamedPipeHandleState 0x5c 0x411bb5f8 (nil) (nil)
...
fixme:sync:SetNamedPipeHandleState 0xa8 0x4225f5f8 (nil) (nil)
fixme:ole:RegisterTypeLib Registering non-oleautomation interface!
...
fixme:ole:RegisterTypeLib Registering non-oleautomation interface!
fixme:ole:ITypeInfo_fnRelease destroy child objects
...
fixme:ole:ITypeInfo_fnRelease destroy child objects

M. Hearn: Try using native DCOM [with this particular program] for now. We need to figure out exactly how the stub manager tracks outstanding marshalled packets (well either that or use a big hack :). Wine Archive Link


err:ole:xCall Did not find typeinfo/funcdesc entry for method 0!

err:ole:_get_funcdesc Did not find a typeinfo for reftype 0?
err:ole:xCall Did not find typeinfo/funcdesc entry for method 0!
err:ole:CoUnmarshalInterface Couldn't query for interface 

Firstly, check your version of Wine as you may using be an older version.

R. Shearman:We shouldn't be calling methods 0-2 any more as these are the IUnknown methods and we defer to the outer unknown for these now. Otherwise, please attach a +ole,+typelib,+olerelay log and post to the Wine Developers' Mailing List and I'll see if I get time to look at it. Wine Archive Link


fixme - fixed

fixme:win:SetWindowTextA cannot set text "InstallShield Wizard" of other 
process window (nil)
fixme:dialog:MSGBOX_OnInit task modal msgbox ! Not modal yet.
fixme:dialog:MSGBOX_OnInit task modal msgbox ! Not modal yet.

Ivan Leo Puoti [July 05]: It's a bit of an ancient build of wine, I fixed that fixme last year. [Hint - use a newer version] Wine Archive


ole:marshal_object couldn't get IPSFactory buffer for interface

>err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
>err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
>err:ole:proxy_manager_create_ifproxy Could not get IPSFactoryBuffer for interface {00000131-0000-0000-c000-000000000046}, error 0x80040155
>err:ole:CoUnmarshalInterface IMarshal::UnmarshalInterface failed, 0x80040155

Then the dialog reads: The InstallShield Engine (iKernel.exe) could not be launched. (0x80040155)

R. Shearman [Jun 05]: The problem is that COM can't find a registered IPSFactoryBuffer for the IRemUnknown interface. The settings are stored in the registry and should be there after registering the DLL. The solution is to run "regsvr32 ole32". This is done automatically for any Wine installed in the last 4 months or so. Wine Archives


err:ole:marshal_object object doesn't expose interface

err:ole:marshal_object object doesn't expose interface {be6115a1-7de5-48dc-ad2a-25060e00fce2}, failing with error 0x80004002
err:ole:ClientIdentity_QueryMultipleInterfaces IRemUnknown_RemQueryInterface failed with error 0x80004002

R. Shearman[Aug 2005]: These are relatively normal. I expect I will change these into a warn in the future, but I started out being verbose to flag any possible errors as early as possible. [Wine Archive unavailable]


fixme:htmlhelp:HtmlHelpW ((nil), (null), command=HH_INITIALIZE, data=2075721216): stub

J. Hawkins [aug 05]: The app is calling HtmlHelpW with the HH_INITIALIZE command which configures HTML Help to run in the same thread as the app. HTML Help is the system used to display help files. Wine Archive


stdole2 progress
R. Shearman [July 05]: I believe the status was that a similar enough stdole2 cannot be generated using widl without some extensions. There are two options:

  1. Generate the file manually by invoking ICreateTypeLib2 functions (I believe Microsoft do it this way).
  2. Add another mode to widl that allows the necessary forward references in idl files. Huw Davies knows more about this problem.

Wine Archive


fixme:rpc:NdrClientCall2 RPC_FC_BIND_GENERIC

fixme:rpc:NdrClientCall2 RPC_FC_BIND_GENERIC

R. Shearman:[Dec 05] Generic binding handles are unimplemented. The two that are implemented so far are implicit and explicit binding handles, where the handle is already setup and initialized before the function is called. Generic binding handles are auto-initializing, meaning that we should call a function to get the appropriate handle where this FIXME is. This isn't implemented yet, due to me not having a test program for it.

A volunteer tester noted improvements and then commented: The Server-Properties-Window opens and react on the Mouse,but the Fields are Empty or filled with Garbage.(same garbage as buildin winspool.drv with my patch for OpenPrinter)

R. Shearman: This would probably be because the RPC call is failing. I think NdrSendReceive should throw an exception on failure, but currently doesn't so it silently fails, causing the garbage you describe. The failure is caused by not having a handle to the server. wine archive

Wine Breakages as reported in the Forums

1.1.12

[Bug 16821] all installshield installers are suspected to be broken in 1.1.12, either upgrade to latest git or downgrade and wait for the next release. 1.1.13 is now released [Jan 09]. A. English: The bug wasn't known when it was released. We release every two weeks anyway, so it wasn't that big of a deal. Stable (1.0.1) was unaffected. [..] it's [an] unstable/development release.

0.94

A user reported [Dec 05] that with 0.94 installshield would fail.

Another reported: normally I run with LC_CTYPE=ja_JP.utf8 on my system, but to get installers and other things to work with wine (especially input field type stuff) I have to run wine as "LC_ALL=C wine". I suspect IMM problems are the reason for this, but haven't tracked it down.

The first user confirmed the issue was not the LC_CTYPE. wine archive


Wine Links

(Official) Wine Links

(Unofficial) Wine-Wiki Links


"Generally, Microsoft does not object to parties making referential links to Microsoft's web sites . However, we prefer that any reference to our company name or product names appear in a simple font and format and that you use appropriate words, such as "This way to Microsoft.com" or "Click here for more information on Microsoft Frontpage"

Official InstallShield Wine Links

Wine Archive Links

External Links

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox