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]