You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by "William A. Rowe, Jr." <wr...@lnd.com> on 2000/07/28 20:44:43 UTC

RE: cvs commit: apache-1.3/src/os/win32 monitoring-services.txt service.c

Win32 hackers,

I wish I had more time to do something more with the taskbar
app... I just don't.  Since it doesn't both me or any of my
Admin folks to look in the service control panel applet to
check statuses, this doesn't have a high priority.  But since
Brian Moon and others were attacking this very issue, I thought
it was time to get some docs on the issue into the tree.  See
src/os/win32/monitoring-services.txt (at the bottom of the
commit message here) for my thoughts.  I'll also committed a
two-size (original 32x32 and cleaned up 16x16) icon for 
src/os/win32/apache.ico - but I won't object if someone adds
more touchup or highlighting.

With the exception of isapi's attack issue, my work on 1.3.x
seems pretty pat.  I don't see anything further that 'must' be
done, and I'm excited to see 2.0 Win32 looking pretty stable
(not production ready, perhaps, but at least serving pages!)

Bill

> wrowe       00/07/28 11:30:12
> 
>   Modified:    .        STATUS
>                src/os/win32 service.c
>   Added:       src/os/win32 monitoring-services.txt
>   Log:
>     Some straightforward keys for Win9x (the NT path is not 
> affected)...
>     added ImagePath and DisplayName to the Win9x service key 
> for monitor
>     authors to iterate the registry and provide 'work-alike' 
> capabilities.
>   
>     Also, the console patch committed was to hold the console 
> open on error.
>     This is the converse from closing apache and the console 
> when Close is
>     selected from the window menu, or the window close button 
> is clicked.
>     That problem remains :(
>   
>   Revision  Changes    Path
>   1.835     +13 -2     apache-1.3/STATUS
>   
>   Index: STATUS
>   ===================================================================
>   RCS file: /home/cvs/apache-1.3/STATUS,v
>   retrieving revision 1.834
>   retrieving revision 1.835
>   diff -u -r1.834 -r1.835
>   --- STATUS	2000/07/28 08:58:43	1.834
>   +++ STATUS	2000/07/28 18:30:09	1.835
>   @@ -1,5 +1,5 @@
>      1.3 STATUS:
>   -  Last modified at [$Date: 2000/07/28 08:58:43 $]
>   +  Last modified at [$Date: 2000/07/28 18:30:09 $]
>    
>    Release:
>    
>   @@ -385,8 +385,18 @@
>     Important
>    
>        * fix O(n^2) attack in mod_isapi.c ... i.e. recopy the 
> code from
>   -      scan_script_headers_err_core.
>   +      scan_script_headers_err_core.  Concept patch 
> available for review
>   +      from OtherBill <00...@corecomm.net>
>    
>   +    * Apache console on Windows 95 (98?) won't close, 
> close button/menu 
>   +      option can't (?) be intercepted, any workarounds out there?
>   +      There is also an unverified report that Apache in a 
> Win98 (95?) 
>   +      console window is ignoring shutdown/logoff, but this is not a
>   +      confirmed report, and Apache as a hidden service 
> does not share
>   +      this reported problem.  Perhaps this is a child 
> process issue,
>   +      or just a simple matter of timing, since a hidden 
> window exists
>   +      to intercept these conditions.
>   +
>     In progress:
>    
>        * Windows install script review/revision?
>   @@ -402,6 +412,7 @@
>            C language WinAPI (no MFC) multiple-services aware 
> taskbar app for 
>            both WinNT and Win95.  Open to anyone proposing 
> something complete.
>            If it comes between releases, add it to contrib right away!
>   +        See src/os/win32/monitoring-services.txt for details.
>    	Status: Ken +1, Sameer +1, Martin +1, Ben +1 (as long as
>    		we get a single executable)
>    	Paul: No like Win95 specific stuff
>   
>   
>   
>   1.25      +43 -1     apache-1.3/src/os/win32/service.c
>   
>   Index: service.c
>   ===================================================================
>   RCS file: /home/cvs/apache-1.3/src/os/win32/service.c,v
>   retrieving revision 1.24
>   retrieving revision 1.25
>   diff -u -r1.24 -r1.25
>   --- service.c	2000/07/03 14:50:52	1.24
>   +++ service.c	2000/07/28 18:30:12	1.25
>   @@ -620,7 +620,7 @@
>                return;
>            }
>    
>   -        /* Attempt to add a key for our service */
>   +        /* Attempt to add the value for our service */
>            rv = RegSetValueEx(hkey, service_name, 0, REG_SZ, 
>                               (unsigned char *)szQuotedPath, 
>                               strlen(szQuotedPath) + 1);
>   @@ -632,6 +632,48 @@
>                RegCloseKey(hkey);
>                return;
>            }
>   +
>   +        RegCloseKey(hkey);
>   +
>   +        /* Create/Find the Service key for Monitor 
> Applications to iterate */
>   +        ap_snprintf(szPath, sizeof(szPath), 
>   +                    
> "SYSTEM\\CurrentControlSet\\Services\\%s", service_name);
>   +        rv = RegCreateKey(HKEY_LOCAL_MACHINE, szPath, &hkey);
>   +        if (rv != ERROR_SUCCESS) {
>   +            SetLastError(rv);
>   +            ap_log_error(APLOG_MARK, 
> APLOG_ERR|APLOG_WIN32ERROR, NULL,
>   +                         "Could not create/open the %s 
> registry key", szPath);
>   +            return;
>   +        }
>   +
>   +        /* Attempt to add the ImagePath value to identify 
> it as Apache */
>   +        rv = RegSetValueEx(hkey, "ImagePath", 0, REG_SZ, 
>   +                           (unsigned char *)szQuotedPath, 
>   +                           strlen(szQuotedPath) + 1);
>   +        if (rv != ERROR_SUCCESS) {
>   +            SetLastError(rv);
>   +            ap_log_error(APLOG_MARK, 
> APLOG_ERR|APLOG_WIN32ERROR, NULL,
>   +                         "Unable to install service: "
>   +                         "Could not add ImagePath to %s 
> Registry Key", 
>   +                         service_name);
>   +            RegCloseKey(hkey);
>   +            return;
>   +        }
>   +
>   +        /* Attempt to add the DisplayName value for our service */
>   +        rv = RegSetValueEx(hkey, "DisplayName", 0, REG_SZ, 
>   +                           (unsigned char *)display_name, 
>   +                           strlen(display_name) + 1);
>   +        if (rv != ERROR_SUCCESS) {
>   +            SetLastError(rv);
>   +            ap_log_error(APLOG_MARK, 
> APLOG_ERR|APLOG_WIN32ERROR, NULL,
>   +                         "Unable to install service: "
>   +                         "Could not add DisplayName to %s 
> Registry Key", 
>   +                         service_name);
>   +            RegCloseKey(hkey);
>   +            return;
>   +        }
>   +
>            RegCloseKey(hkey);
>        }
>    
>   
>   
>   
>   1.1                  apache-1.3/src/os/win32/monitoring-services.txt
>   
>   Index: monitoring-services.txt
>   ===================================================================
>   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.)
>   
>   
>   
>