mturk 2003/03/12 09:27:59
Modified: daemon/src/native/nt/procrun procrun.c
Log:
When calling //DS// (Delete Service) ensure
that the service is stopped (stop if needed).
That enables Tomcat 5 uninstall to skip "net stop" call.
Revision Changes Path
1.11 +45 -22 jakarta-commons-sandbox/daemon/src/native/nt/procrun/procrun.c
Index: procrun.c
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/daemon/src/native/nt/procrun/procrun.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- procrun.c 21 Feb 2003 21:07:24 -0000 1.10
+++ procrun.c 12 Mar 2003 17:27:58 -0000 1.11
@@ -730,6 +730,12 @@
proc->service.description = pool_strdup(proc->pool, kval);
}
klen = MAX_PATH;
+ if ((err = RegQueryValueEx(key, PROCRUN_PARAMS_DISPLAY, NULL, NULL,
+ (unsigned char *)kval,
+ &klen)) == ERROR_SUCCESS) {
+ proc->service.display = pool_strdup(proc->pool, kval);
+ }
+ klen = MAX_PATH;
if ((err = RegQueryValueEx(key, PROCRUN_PARAMS_WORKPATH, NULL, NULL,
(unsigned char *)kval,
&klen)) == ERROR_SUCCESS) {
@@ -1248,13 +1254,12 @@
buff[n++] = ' ';
SwitchToThread();
}
-#else
+#endif
if (WriteFile(env->m->h_stdout[0], &ch, 1, &written, NULL) == TRUE) {
SwitchToThread();
}
else
break;
-#endif
readed = 0;
}
}
@@ -1294,13 +1299,12 @@
buff[n++] = ' ';
SwitchToThread();
}
-#else
+#endif
if (WriteFile(env->m->h_stderr[0], &ch, 1, &written, NULL) == TRUE) {
SwitchToThread();
}
else
break;
-#endif
readed = 0;
}
}
@@ -1610,7 +1614,7 @@
* Process the arguments.
*/
static int process_args(process_t *proc, int argc, char **argv,
- char **display, char **java, char *path)
+ char **java, char *path)
{
int arglen = 0;
char *argp;
@@ -1633,7 +1637,7 @@
else if (STRNI_COMPARE(argp, PROCRUN_PARAMS_DESCRIPTION))
proc->service.description = pool_strdup(proc->pool, argv[++i]);
else if (STRNI_COMPARE(argp, PROCRUN_PARAMS_DISPLAY))
- *display = argv[++i];
+ proc->service.display = argv[++i];
else if (STRNI_COMPARE(argp, PROCRUN_PARAMS_WORKPATH))
proc->service.path = pool_strdup(proc->pool, argv[++i]);
else if (STRNI_COMPARE(argp, PROCRUN_PARAMS_JVM_OPTS)) {
@@ -1706,8 +1710,6 @@
DBPRINTF1("Adding cmdline %s\n", argv[n]);
}
}
- if (!*display)
- *display = proc->service.name;
if (!proc->service.startup)
proc->service.startup = SERVICE_AUTO_START;
return 0;
@@ -1724,10 +1726,16 @@
set_service_param(proc, PROCRUN_PARAMS_CMDARGS, proc->argw, 0, 0);
if (proc->service.description) {
set_service_param(proc, PROCRUN_PARAMS_DESCRIPTION,
- proc->service.description, 0, 1);
+ proc->service.description, 0, 0);
set_service_param(proc, PROCRUN_PARAMS_DESCRIPTION,
proc->service.description, 0, 1);
}
+ if (proc->service.display) {
+ set_service_param(proc, PROCRUN_PARAMS_DISPLAY,
+ proc->service.display, 0, 0);
+ set_service_param(proc, PROCRUN_PARAMS_DISPLAY,
+ proc->service.display, 0, 1);
+ }
if (proc->service.image)
set_service_param(proc, PROCRUN_PARAMS_IMAGE,
proc->service.image, 0, 0);
@@ -1778,20 +1786,18 @@
SC_HANDLE service;
SC_HANDLE manager;
char path[MAX_PATH+1] = {0};
- char *display = NULL;
char *java = NULL;
if (!proc->service.name) {
return -1;
}
- if (process_args(proc, argc, argv, &display, &java, path)) {
+ if (process_args(proc, argc, argv, &java, path)) {
DBPRINTF0("Installing NT service: process_args failed\n");
return -1;
}
-
- DBPRINTF2("Installing NT service %s %s", path, display);
+ DBPRINTF2("Installing NT service %s %s", path, proc->service.display);
manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (!manager) {
@@ -1800,7 +1806,7 @@
service = CreateService(manager,
proc->service.name,
- display,
+ proc->service.display,
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
proc->service.startup,
@@ -1852,7 +1858,7 @@
return -1;
}
- if (!process_args(proc, argc, argv, &display, &java, path)) {
+ if (!process_args(proc, argc, argv, &java, path)) {
DBPRINTF0("Installing service: process_args failed\n");
return -1;
}
@@ -1887,8 +1893,8 @@
return -1;
}
rv = RegSetValueEx(hkey, "DisplayName", 0, REG_SZ,
- (unsigned char *) display,
- strlen(display) + 1);
+ (unsigned char *) proc->service.display,
+ strlen(proc->service.display) + 1);
RegCloseKey(hkey);
if (rv != ERROR_SUCCESS) {
DBPRINTF0( "Could not add DisplayName to our Registry Key\r\n");
@@ -1907,7 +1913,6 @@
SC_HANDLE manager;
char *argp;
char path[MAX_PATH+1];
- char *display = NULL;
char *java = NULL;
int arglen = 0;
@@ -1944,6 +1949,10 @@
proc->service.errname = NULL;
proc->java.start_class = NULL;
proc->java.stop_class = NULL;
+ proc->java.opts = NULL;
+ proc->service.account = NULL;
+ proc->service.password = NULL;
+ proc->service.display = NULL;
proc->argw = NULL;
/* parse command line */
for (i = 2; i < argc; i++) {
@@ -1954,7 +1963,7 @@
else if (STRNI_COMPARE(argp, PROCRUN_PARAMS_DESCRIPTION))
proc->service.description = pool_strdup(proc->pool, argv[++i]);
else if (STRNI_COMPARE(argp, PROCRUN_PARAMS_DISPLAY))
- display = argv[++i];
+ proc->service.display = argv[++i];
else if (STRNI_COMPARE(argp, PROCRUN_PARAMS_WORKPATH))
proc->service.path = pool_strdup(proc->pool, argv[++i]);
else if (STRNI_COMPARE(argp, PROCRUN_PARAMS_JVM_OPTS)) {
@@ -2031,11 +2040,11 @@
NULL,
NULL,
NULL,
- display);
+ proc->service.display);
CloseServiceHandle(service);
CloseServiceHandle(manager);
-
+
save_service_params(proc,java);
SetEvent(proc->events[0]);
@@ -2072,7 +2081,21 @@
QueryServiceStatus(service, &status);
if (status.dwCurrentState != SERVICE_RUNNING)
ss = DeleteService(service);
-
+ else {
+ /* Stop the service */
+ if (ControlService(service, SERVICE_CONTROL_STOP, &status)) {
+ Sleep(1000);
+ while (QueryServiceStatus(service, &status)) {
+ if (status.dwCurrentState == SERVICE_STOP_PENDING)
+ Sleep(1000);
+ else
+ break;
+ }
+ }
+ QueryServiceStatus(service, &status);
+ if (status.dwCurrentState != SERVICE_RUNNING)
+ ss = DeleteService(service);
+ }
CloseServiceHandle(service);
CloseServiceHandle(manager);
if (!ss)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]