By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,296 Members | 1,457 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,296 IT Pros & Developers. It's quick & easy.

Windows Service Launching C# App

P: n/a
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!)
Jul 21 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
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?
Brad Jones wrote:
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!)

Jul 21 '05 #2

P: n/a
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.
"Joshua Flanagan" <jo**@msnews.com> wrote in message
news:eZ**************@TK2MSFTNGP12.phx.gbl...
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?
Brad Jones wrote:
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!)

Jul 21 '05 #3

P: n/a
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!

Brad Jones wrote:
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.
"Joshua Flanagan" <jo**@msnews.com> wrote in message
news:eZ**************@TK2MSFTNGP12.phx.gbl...
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?
Brad Jones wrote:
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!)


Jul 21 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.