Windows Service Launching C# App

  • Thread starter Thread starter Brad Jones
  • Start date Start date
B

Brad Jones

Hello, I'm hoping someone can give me some help or guidance here. I'm not
sure if this is even the best group to post to for this.

Our OEM equipment's software architecture relies heavily on a "master"
windows service. This responsibility of this service is to launch 10 or so
other applications, some of which have GUI's. These applications need to be
running whether somebody is logged in or not. There is no communication
required between the master service and the individual applications. An
external configuration file is read by the master service when it starts,
telling it which applications to launch and what other behavior is desired.
So, when a newly developed application requires that it be running when
nobody is logged in, information is simply added to the configuration file
and we're done. Currently, all of these applications are C++/MFC and the
trick (hack?) used to keep these applications running when a user logoff
occurs is related to http://support.microsoft.com/kb/q164166/ . This has
been working well for several years.

Now to my question. I recently completed development on a GUI C# application
which I would like to run in the same manner as described above. Everything
starts up fine, but my C# application does not survive the logoff, and in
some cases interferes with it. Is there a way to get past this or should I
start looking for another solution (like rewrite it in C++). Hope this makes
sense to somebody and thanks in advance for any advice.


Brad Jones (Not CoduGuru guy!)
 
I assume you need the functionality to be usable from both a GUI and a
service.
Is there a reason why you can't factor out the common code into a
separate library, and then call it from the service and the GUI?
 
Hi Joshua, thanks for the response.

These applications do not need to be invoked independent of the service,
although they can be. Our equipment populates circuit boards with
components, and most of the applications handle various conditions and
situations that can occur requiring user intervention to resolve. So, in
essence, the applications act like services with GUI's.

A customer typically starts the production run and logs out for security
reasons. Many times another user will log in with reduced privileges but the
machine continues to run during any logouts. Since, as you know, services
don't readily support a GUI, the method I described earlier is how we get
around that. All applications started by the master service
(CreateProcess()/CreateProcessAsUser()) remain running until machine/windows
shutdown. We display dialogs, handle windows messages, and even access the
network if needed (using a predefined account) without anyone logged in.
There are lights on the equipment which alert the user to any problems. BTW
we are running Win2k Pro.

I guess I'm looking for an equivalent method (again...hack?) to keep the C#
app running during a logoff. Maybe one doesn't exist. Rearchitecting is not
really an option at this point. I'd sooner be forced to do a rewrite in C++.

I don't know if any of that information is helpful, but thanks again for
taking the time to respond.
 
That's very interesting. Sorry I don't have any solution for your
immediate problem. If you do consider re-architecting in the future,
I'd suggest that you look into creating a separate GUI application that
communicates with the service via .NET remoting. That way the service
can continue to run and do its work when a user is logged out - but a
logged in user would still be able to interact with the service (through
the separate GUI client).

Good luck!
 
Back
Top