Problem with client manually starting services

Roy Shea roy at cs.hmc.edu
Thu Nov 8 14:21:42 CST 2007


On Thu, Nov 08, 2007 at 12:00:28PM +0000, Robert Shearman wrote:
> Roy Shea wrote:
> >Howdy All,
> >
> >I'm developing missing services in Wine and am running into problems
> >with how Wine starts services.  In Windows a service can be started
> >using "net start <service name>", assuming that the service is
> >properly added to the registry.  In Wine it appears that the user must
> >manually start the service before calling "net start <service name>",
> >or the service fails to start.
> 
> What makes you think that? There are quite a few programs, including 
> InstallShield, that start their own services without the process being 
> started beforehand.
> You could start with pulling +advapi,+relay log of "net start" executing 
> to try to figure out what is going wrong. My guess would be that either 
> svchost or the DLL isn't notifying the SCM of its started status.
> 
> -- 
> Rob Shearman

Further testing shows that a server process actually is started by
Wine.  Good!  What set me off on this goose chase was the output
generated when I tried to start a process:

----
$ ./programs/net/net start count_server
The count_server service is starting.
The count_server service failed to start.
----

Despite the notice that the service failed to start, it is happily up
and running.  A similar test for services started via svchost reveal
the same behavior; the service starts but "net" says that it did not
start.

Debug logs with +advapi,+relay looked odd.  In particular,
StartServiceW returns 0 (failure) triggering the error message from
net.  I dug into this and it looks like the problem is in either
"service_start_process" in dlls/advapi32/service.c or "CreateProcessW"
in dlls/kernel32/process.c.

The call to WaitForMultilpeObjectsEx from service_start_process fails
because the handle for the freshly created process is invalid.  This
triggers the error message from net.  This invalid process handle is
the result of CreateProcessW not setting process information when a
process started is a BINARY_UNIX_EXE.

Should process info be set when a BINARY_UNIX_EXE processes is
created?

Peace,
-Roy






More information about the wine-devel mailing list