http://bugs.winehq.org/show_bug.cgi?id=20296
Christoph Hohmann reboot@gmx.ch changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |reboot@gmx.ch
--- Comment #15 from Christoph Hohmann reboot@gmx.ch 2010-01-10 09:23:54 --- The problem seems to be that the launcher tries to use a com object with the CLSID {629f8434-0530-41e6-b7c5-61a82faa3df2} which can not be created. The launcher seems to assume that the was created without checking if it really worked.
The first problem is that the installer does not create the CLSID and AppID entries in the registry for the com object. I'll attach a registry file that will create the entries I got from a windows installation, you might need to adjust the path of the DLL.
The second problem is that lol.launcher tries to load a COM object that has only a InprocServer32 entry with the CLSCTX_LOCAL_SERVER flag. On windows the DLL is loaded into a out-of-process surrogate server. From what I could understand from the wine's code it does not support this. Wine can only start com servers if they have a LocalService entry under the AppId entry.
To check if the crash is really related to this I started lol.launcher in the wine debugger and put a break point CoGetClassObject. Every time the debugger stopped in the function i checked which CLSID should be loaded and when lol.launcher tried to load {629f8434-0530-41e6-b7c5-61a82faa3df2} I modified the paramter dwClsContext from CLSCTX_LOCAL_SERVER (0x4) to CLSCTX_INPROC_HANDLER (0x1). Like this the DLL in loaded into the lol.launcher instead of running it into a seperate process. After i continued the execution of the process it did not crash anymore and the launcher window opened. It even downloaded and applied the latest patch.
A proper solution would probably be to check for the DllSurrogate key of the AppID entry in the registry and then try to start a surrogate server. It seems lol.launcher does this because these are started from a windows service and have other permissions then the process that loaded the com object (see http://leagueoflegends.com/board/showthread.php?p=79566#post79566). So may not be needed on wine and the DLL can just be loaded in-process.