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]

Reply via email to