On Wed, Aug 19, 2015 at 01:21:32PM -0400, Robert D Kocisko wrote:
> I am attempting to make some tweaks to Wine so it can run a (3rd party)
> windows service that uses CreateWindowEx, and I'm not sure whether I'm on
> the right track or not. What is happening is that when the service calls
> CreateWindowEx, I get this error:
>
> Application tried to create a window, but no driver could be loaded.
> The explorer process failed to start.
>
> I traced it down to the following source code line in
> wine/dlls/user32/driver.c:
>
> UINT guid_atom = HandleToULong( GetPropW( hwnd, display_device_guid_propW
> ));
>
> What is happening is that guid_atom returns 0 which ultimately ends up
> disallowing any connection to a graphics driver.
>
> Now it seems to me that the explorer.exe process is supposed to be
> providing a desktop window and setting that atom value. But if I try to
> run wine explorer.exe it doesn't make any difference. I am keeping Wine
> alive by running wine notepad & and I am also running wine services to make
> sure that the SCM is alive and available for the services.
>
> OS: Elementary OS Freya 0.3
>
>
> Is this something that Wine should support? I have had success getting
> other 3rd party services to work so it seems that it shouldn't be too
> difficult to make this work. Could anyone provide guidance on how I should
> proceed to tweak the code to support this? Or if this is going to be a
> huge project to make this work I would appreciate knowing that too :).
>
I've run into the same issue with the MSOffice 2013 installer. Your
diagnosis is correct. I'm not aware of a proper fix.
There is an ugly hack that will work around the bug. At the beginning
of <dlls/user32/user_main.c:winstation_init>, set "info.lpDesktop" to
NULL just after the GetStartupInfo() call. This will force Wine to
create a new desktop for your service's winstation, which should then
load the graphics driver.
Again, this is just a crummy hack to work around the issue. If you'd
like to dig into Wine's desktop and winstation implementations further
and find a correct fix for this, it would be appreciated.
Andrew