• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1238
  • Last Modified:

Killing a console application

I have a console application that closes by capturing CTRL_CLOSE_EVENT message.
If I startup this application manually, and then close the DOS console window via the CLOSE [X] icon, the applications closes successfully.
I can verify that it closes successfully, because I can see the debug log file showing that it captured the CTRL_CLOSE_EVENT message.

Now here is where my problem is at.  I have a test application that is suppose to launch the above console application, and then after peformming the proper test, it suppose to signal to the console application to close.  However, I can't seem to get the console application to close programmatically.
Here's the code that is in the test application:

            STARTUPINFO si;
            PROCESS_INFORMATION pi;
            char TargetExec[] = "..\\debug\\FileBridgeApp.exe";
            
            ZeroMemory( &si, sizeof(si) );
            si.cb = sizeof(si);
            ZeroMemory( &pi, sizeof(pi) );
            if (CreateProcess( NULL,      // No module name (use command line).
                        TargetExec,                  // Command line.
                        NULL,                        // Process handle not inheritable.
                        NULL,                        // Thread handle not inheritable.
                        FALSE,                        // Set handle inheritance to FALSE.
                        0,                              // No creation flags.
                        NULL,                        // Use parent's environment block.
                        NULL,                        // Use parent's starting directory.
                        &si,                        // Pointer to STARTUPINFO structure.
                        &pi )                        // Pointer to PROCESS_INFORMATION structure.
                  )
            {
                  CreateFilesInMonitoringDirectorys(teststructure, QtyTestApp);
                  // Close process and thread handles.
                  CloseHandle( pi.hProcess ); // ******this does not close the application
                  CloseHandle( pi.hThread ); // ******this does not close the application

How can  correctly signal to the application to close.
0
Axter
Asked:
Axter
  • 3
  • 3
1 Solution
 
AxterAuthor Commented:
That link is about capturing CTRL_CLOSE_EVENT message.

As I stated in my question, I'm not having a problem with capturing the message.

My problem is with the test application sending the message.
0
 
jkrCommented:
>>CloseHandle( pi.hProcess ); // ******this does not close the application

Well, it only closes the process handle. See http://support.microsoft.com/kb/q178893/ ("How To Terminate an Application "Cleanly" in Win32").
0
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

 
AxterAuthor Commented:
Thanks jkr.

I replace CloseHandle lines with the following:
EnumWindows((WNDENUMPROC)TerminateAppEnum, (LPARAM) pi.dwProcessId) ;

And copied and pasted the TerminateAppEnum function to my test project, and that seem to have done the trick.
0
 
jkrCommented:
Um, sorry to be nitpicking, but you still should call 'CloseHandle()' even after terminating the console process. The "costs" in user space (4 bytes for the handle) is not important, but...
0
 
AxterAuthor Commented:
>>you still should call 'CloseHandle()'

What is gain by that?
When the console application shutsdown, wouldn't it close the process and the threads?
0
 
jkrCommented:
For the app you're terminating, that's it. But, the calling app is still responsible to free the control structures (IOW: What's 'behind' the handle). It's not that much of memory, but that might add up e.g. in a server app in the long run.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now