Hi , I am not running apache as a service. I am running it from another application in a sort of way similar to launching apache from the command line
Regards, asif On Fri, Sep 19, 2008 at 2:13 PM, Foo JH <[EMAIL PROTECTED]> wrote: > If all you wand to do is start and stop the Apache service, why don't you > simply do the following on the command line: > net start Apache2 > net stop Apache2 > > > Asif M wrote: > >> Hi all, >> >> I have the following problem :- >> >> I wrote a Apache Control Program in Visual Studio 2003, which does the >> following >> 1>. Starts Apache with CreateProcess Call. I run Apache on the command >> interpreter but not as a service. >> 2>. Redirects all standard input / output of Apache to the Apache Control >> Program so that the Apache cmd-line output actually appears in the log >> window of the control program >> 3>. Stops Apache >> >> #3 has some problem. >> When I try to stop Apache, I try the following >> 1>. Send a control-C control event to the process the CreateProcess call >> returns >> 2>. Close the input pipe which I passed on to Apache during the >> CreateProcess >> 3>. Do an TerminateProcess on the process id returned by the CreateProcess >> call >> >> When I run Apache from the command line, a ctrl+c stops both the running >> httpd process. However programmatically #1 does not have any effect. It >> feels that Apache has not received the Ctrl+C I send. >> >> #2 does not have any impact on the running Apache Process either >> >> #3 only kills the primary httpd process running. It does not kill the >> second process. >> >> Here is the code excerpt :- >> >> ///////////// STARTING APACHE ////////////////////// >> _tcscpy(_pszCmdLine,m_szApacheBaseDir); >> _tcscat(_pszCmdLine,_T("\\bin\\httpd.exe")); >> _tcscat(_pszCmdLine,_T(" -f ")); >> _tcscat(_pszCmdLine,m_szApacheCfgFile); >> _tcscat(_pszCmdLine,_T(" -e debug")); >> >> //.. code to create input/output/error pipes and replicate the handles in >> the si structure >> >> if (!::CreateProcess( >> NULL, >> (LPTSTR)pszCmdLine, >> NULL, NULL, >> TRUE, >> CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP, >> NULL, NULL, >> &si, >> &pi)) >> { >> int n = GetLastError(); >> return FALSE; >> } >> >> >> ///////////////////// STOPPING APACHE /////////////////////// >> int j = _tcslen(ctrlC); >> WriteFile(m_hStdinWrite, (LPCTSTR)ctrlC,2, &dwWritten, NULL); >> if ( !GenerateConsoleCtrlEvent(CTRL_C_EVENT,m_dwProcessGroupId)) >> j = GetLastError(); >> >> CloseHandle(m_hStdinWrite); >> CloseHandle(m_hStdinRead); >> >> if (m_dwProcessGroupId) >> { >> _hProcessHandle = >> OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_dwProcessGroupId); >> if (_hProcessHandle) >> { >> GetExitCodeProcess(_hProcessHandle,&_dwExitCode); >> int n = GetLastError(); >> TerminateProcess(_hProcessHandle,1); >> } >> int n = GetLastError(); >> } >> >> >> >> I would like to know how to send a Ctrl+C event to apache so that I can >> cleanly / gracefully shutdown Apache. >> Any pointers will be extremely appreciated? >> >> Thanks in Advance, >> Asif >> > >