| From: William A. Rowe, Jr. |
| Date: June 7th '00 |
| Subject: service monitoring in Apache 1.3.13 |
| |
| The concept for a taskbar monitor has been thrown around |
| for a very long while. 1.3.13 introduced Win9x services, |
| and that added fuel to the mix. Here are some sideband |
| observations I've made for other developers... |
| |
| About Apache as a console, don't start Apache hidden without |
| any command line arguments if you want to launch it yourself |
| in a hidden window (it will do the classic test for |
| AllocConsole/FreeConsole)... drop in some arguments such as |
| the -f or -r option and it will fly without thinking it is a |
| service under 9x and NT. |
| |
| Rule two, don't use --ntservice as an argument, ever. Only |
| the Windows NT Service Control Manager is allowed to pass that |
| flag, and only that flag, when it runs Apache.exe. Do use |
| --ntservice as the sole argument to the executable name if |
| you are installing an Apache NT service yourself. |
| |
| Rule three, use -k start and -n name when maintaining the |
| HKLM/Software/Microsoft/Windows/CurrentVersion/RunServices |
| list, since there is no other way for Apache to know what |
| the service is named :) And look at any 9x installed service's |
| RunServices entry in the registry for the start service semantic. |
| |
| Rule four, use the WinNT Service Control Manager exclusively |
| for starting, stopping and restarting Apache as an NT service. |
| The restart signal is the value 128, as documented in service.h |
| and service.c - this will continue to work in Apache 2.0. If |
| it fails, you are handling an older version (pre 1.3.13) of |
| Apache, and need to stop and then start the service instead. |
| |
| Rule five, use the legacy pid-named events to signal Win9x |
| service Apache to restart and stop the service. But don't |
| bother looking for httpd.pid files... you can get the pid |
| right from the hidden service control window. Apache 1.3.13 |
| and 2.x create a hidden window named for the name of the |
| service (without the spaces), with a window class of |
| "ApacheWin95ServiceMonitor", so can use FindWindow to track |
| down running Win9x services. See the service.c code for how |
| I accomplished this pretty simply in the -k stop/-k restart |
| handler. |
| |
| Taskbar Monitor App |
| ------------------- |
| |
| Basic requirements: a C code application using strictly the |
| Win32 API, and not MFC or other Win32 frameworks. Could use |
| the service.c module to share some basic functions. That |
| module could be extended in Apache 2.0 to make this all easier. |
| |
| I think we are looking for an external app that simply acts |
| as a monitor or allows a stopped service to be started. If |
| the user logs off, we loose the monitor app, but installed as |
| a shortcut in the Start group or in the registry key |
| HKLM/Software/Microsoft/Windows/CurrentVersion/Run |
| we will be just fine. I'd like to see the monitor run only |
| one instance to monitor all running services, for memory |
| and resource conservation. |
| |
| I was thinking that the hover/iconbar title would tell them |
| "Test service is running", or "Test service is stopped". |
| If they left click, they could stop or restart, or simply |
| start if it is stopped. There could be a preference that |
| each service doesn't get it's own individual task icon unless |
| it is running, if it is a manual start service (or missing |
| from the RunServices list, which is the equivilant under 9x). |
| |
| If a specific service is set to Auto start or is in the |
| RunServices Win9x registry key, we must show them the stopped |
| icon, of course. We might also keep the icon for any running |
| service that stops abruptly. But there could be a 'single |
| icon' option for the taskbar icon monitor that says show only |
| a single status icon, for simplicity if the administrator runs |
| many Apache services. |
| |
| But I was hoping that any right click would provide a menu |
| of all Apache services with their status. e.g. |
| Test service is stopped |
| Apache_2 service is running |
| MyWeb service is running |
| and each would do the logical submenu, same as if that |
| specific taskbar icon were left clicked, offering to start or |
| offering to stop or restart the server, as appropriate. |
| |
| Finally, to identify all installed Apache services, just query |
| the registry key HKLM\SYSTEM\CurrentControlSet\Services for any |
| key that has the ImagePath value of "...\Apache.exe"... (quotes |
| are significant here, if the leading quote is ommitted the |
| entire string ends with the text \Apache.exe - based on Apache's |
| own service installer in every released version.) |