Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any way to start a GUI application from a windows service on Windows 7?

I have done a lot of searching to find a way to start a GUI application from a windows service on Windows 7. Most of what I have found is that with Windows 7 services now run in a separate user session and can not display any graphical interface to the current user. I'm wondering is there is any kind of workaround or different way of accomplishing something like this? Can the service start a process in a different user session?

like image 490
Brian Avatar asked Feb 21 '11 08:02

Brian


2 Answers

This change was made for a reason and not simply to annoy developers. The correct approach is to put your UI in a different program and communicate with the session through a pipe, or some other IPC mechanism. The recommendation that services do not present UI is more than 10 years old now.

You should really try to follow these rules, even though it may seem inconvenient to begin with. On the plus side you will enjoy the benefit of keeping your service logic and UI logic separate

If your services runs under the LOCALSYSTEM account then you can check "Allow service to interact with desktop", for the benefit of legacy services that would fail if they could not show UI. But it won't help you anyway because the UI will show in session 0 where it is never seen!

I recommend you take a read of the official Microsoft document describing session 0 isolation.

like image 125
David Heffernan Avatar answered Oct 08 '22 10:10

David Heffernan


Windows 7 introduced what is called "Session 0 isolation" that in practice means that every service (except system services) run in a separate non-interactive session. For this reason you cannot directly create a GUI from within the service, except if you run in legacy mode by flagging the Interact With Destop option, which is not good if you plan to run your service for some years in the future.

As David Heffernan said, the best is to use a client-server architecture. WCF makes it easy to communicate with named pipes.

This page is a good starting point to read about Session 0 Isolation and this white paper is also very good.

like image 34
Francesco De Vittori Avatar answered Oct 08 '22 11:10

Francesco De Vittori