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
>>
>
>

Reply via email to