Bill, How's this look?
svn diff Index: mpm_winnt.c =================================================================== --- mpm_winnt.c (revision 153937) +++ mpm_winnt.c (working copy) @@ -1071,7 +1071,8 @@ /* Handle the following SCM aspects in this phase: * * -k runservice [transition for WinNT, nothing for Win9x] - * -k (!)install [error out if name is not installed] + * -k install + * -k config * -k uninstall * -k stop * -k shutdown (same as -k stop). Maintained for backward compatability. @@ -1280,6 +1281,15 @@ "%s: Service is already installed.", service_name); exit(APEXIT_INIT); } + else + { + /* Install the service */ + rv = mpm_service_install(process->pool, inst_argc, inst_argv, 0); + if (rv != APR_SUCCESS) { + exit(rv); + } + /* Proceed to post_config in order to test the installed configuration */ + } } else if (running_as_service) { @@ -1325,6 +1335,15 @@ "No installed service named \"%s\".", service_name); exit(APEXIT_INIT); } + else if (!strcasecmp(signal_arg, "config")) + { + /* Reconfigure the service */ + rv = mpm_service_install(process->pool, inst_argc, inst_argv, 1); + if (rv != APR_SUCCESS) { + exit(rv); + } + /* Proceed to post_config in order to test the installed configuration */ + }
/* Track the args actually entered by the user. * These will be used for the -k install parameters, as well as @@ -1387,8 +1406,8 @@
/* Handle the following SCM aspects in this phase: * - * -k install - * -k config + * -k install (catch and exit as install was handled in rewrite_args) + * -k config (catch and exit as config was handled in rewrite_args) * -k start * -k restart * -k runservice [Win95, only once - after we parsed the config] @@ -1399,18 +1418,23 @@ * We reached this phase by avoiding errors that would cause * these options to fail unexpectedly in another process. */ - if (!strcasecmp(signal_arg, "install")) { - rv = mpm_service_install(ptemp, inst_argc, inst_argv, 0); + /* Service install happens in the rewrite_args hooks. If we + * made it this far, the server configuration is clean and the + * service will successfully start. + */ apr_pool_destroy(s->process->pool); apr_terminate(); - exit(rv); + exit(0); } if (!strcasecmp(signal_arg, "config")) { - rv = mpm_service_install(ptemp, inst_argc, inst_argv, 1); + /* Service reconfiguration happens in the rewrite_args hooks. If we + * made it this far, the server configuration is clean and the + * service will successfully start. + */ apr_pool_destroy(s->process->pool); apr_terminate(); - exit(rv); + exit(0); }
if (!strcasecmp(signal_arg, "start")) {