INFO: Console App Launched from a Service Exits When User Logs Off (149901)
The information in this article applies to:
- Microsoft Win32 Application Programming Interface (API), when used with:
- the operating system: Microsoft Windows NT 3.51
- the operating system: Microsoft Windows NT 4.0
- the operating system: Microsoft Windows 2000
- the operating system: Microsoft Windows XP
This article was previously published under Q149901 SUMMARY
Console applications contain a default console control handler. The console
control handler function is called by the system when a process receives a
CTRL_C, CTRL_BREAK, CTRL_CLOSE, CTRL_LOGOFF, or CTRL_SHUTDOWN signal. By
default, when the console control handler receives any one of these
signals, it calls ExitProcess().
When a console application is launched from a service, the application
receives a modified default console control handler. The modified handler
does not call ExitProcess() for the CTRL_LOGOFF signal. This allows a
console application to continue running when a user logs off the system.
This corresponds with Windows NT services that run when no user is logged
onto the system.
If the console application being launched from a service installs its
own console control handler, this handler is called before the default
handler. If the installed handler calls ExitProcess() as a result of a
CTRL_LOGOFF signal, the console application exits when the user logs off
the system.
Using any third party libraries or DLLs could cause a console control
handler to be installed for an application. If installed, this handler
overrides the default handler, causing the application to exit when
receiving a CTRL_LOGOFF signal.
For example, if you install a SIGBREAK handler via the C run-time function
signal(), the function installs a handler which overrides the default
handler. This causes the application to exit when receiving a CTRL_LOGOFF
event even though it was launched from a service. This problem can be
resolved by either not installing the SIGBREAK handler or by installing
another console control handler after the call to signal(). The new console
control handler must intercept the CTRL_LOGOFF event and just return TRUE
for the application not to exit.
REFERENCES
For more information on console control handlers, please see the
Console Overview in the Win32 SDK documentation.
Modification Type: | Major | Last Reviewed: | 4/13/2004 |
---|
Keywords: | kbConsole kbinfo kbKernBase kbService KB149901 |
---|
|