You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by wr...@locus.apache.org on 2000/07/28 20:30:13 UTC

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

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

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

Posted by "William A. Rowe, Jr." <wr...@lnd.com>.
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.)
>   
>   
>   
>