mturk       2003/02/21 04:13:39

  Modified:    daemon/src/native/nt/procrun procrun.c
  Log:
  Fix the service install.
  
  Revision  Changes    Path
  1.9       +61 -44    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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- procrun.c 17 Feb 2003 18:19:07 -0000      1.8
  +++ procrun.c 21 Feb 2003 12:13:39 -0000      1.9
  @@ -106,6 +106,7 @@
   int g_proc_mode = 0;
   /* The main envronment for services */
   procrun_t *g_env = NULL;
  +static int g_is_windows_nt = 0;
   
   #ifdef PROCRUN_WINAPP
   
  @@ -115,6 +116,7 @@
   extern int  ac_use_try;
   extern int  ac_use_dlg;
   extern int  ac_use_show;
  +extern RECT ac_winpos;
   extern HINSTANCE ac_instance;
   
   #endif
  @@ -863,6 +865,15 @@
                   proc->java.opts = NULL;
               }
           }
  +#ifdef PROCRUN_WINAPP
  +        klen = MAX_PATH;
  +        if ((err = RegQueryValueEx(key, PROCRUN_PARAMS_WINPOS, NULL, NULL, 
  +                                   (unsigned char *)kval,
  +                                   &klen)) == ERROR_SUCCESS) {
  +            sscanf(kval, "%d %d %d %d", &ac_winpos.left, &ac_winpos.right,
  +                                        &ac_winpos.top, &ac_winpos.bottom);
  +        }
  +#endif
           RegCloseKey(key); 
           return 0;
       }
  @@ -1402,6 +1413,15 @@
       STARTUPINFO si;
       DWORD  id;
   
  +    if (!program) {
  +#ifdef PROCRUN_WINAPP
  +        MessageBox(NULL, "Service not found", env->m->service.name,
  +                         MB_OK | MB_ICONERROR);
  +#else
  +        fprintf(stderr, "Service not found%s\n", env->m->service.name); 
  +#endif
  +        return -1;
  +    }
       memset(&si, 0, sizeof(STARTUPINFO));
       si.cb = sizeof(si);
       si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
  @@ -1579,36 +1599,24 @@
       return (err != ERROR_SUCCESS);
   }
   
  -/* from src/os/win32/service.c (httpd-1.3!) */
  - 
  -static BOOL isWindowsNT(void)
  -{
  -    static BOOL once = FALSE;
  -    static BOOL isNT = FALSE;
  - 
  -    if (!once)
  -    {
  -        OSVERSIONINFO osver;
  -        osver.dwOSVersionInfoSize = sizeof(osver);
  -        if (GetVersionEx(&osver))
  -            if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
  -                isNT = TRUE;
  -        once = TRUE;
  -    }
  -    return isNT;
  -}
  -
   /*
    * Process the arguments.
    */
   static int process_args(process_t *proc, int argc, char **argv,
  -                        char *display, char *java, char *path)
  +                        char **display, char **java, char *path)
   {
       int arglen = 0;
       char *argp;
       int i,n;
   
       /* parse command line */
  +    *java = NULL;
  +    if (!GetModuleFileName(NULL, path, MAX_PATH - 
  +                           strlen(proc->service.name) - 7)) {
  +        return -1;
  +    } 
  +    strcat(path, " " PROC_ARG_RUN_SERVICE);
  +    strcat(path, proc->service.name); 
       for (i = 2; i < argc; i++) {
           DBPRINTF2("Parsing %d [%s]\n", i, argv[i]);
           if (strlen(argv[i]) > 2 && argv[i][0] == '-' && argv[i][1] == '-') {
  @@ -1618,7 +1626,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];
  +                *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)) {
  @@ -1626,7 +1634,7 @@
                   strcpy(proc->java.opts, argv[i]);
               }
               else if (STRNI_COMPARE(argp, PROCRUN_PARAMS_JVM))
  -                java = argv[++i];
  +                *java = argv[++i];
               else if (STRNI_COMPARE(argp, PROCRUN_PARAMS_STDINFILE))
                   proc->service.inname = pool_strdup(proc->pool, argv[++i]);
               else if (STRNI_COMPARE(argp, PROCRUN_PARAMS_STDOUTFILE))
  @@ -1663,8 +1671,8 @@
              break; 
           }
       }
  -    if (java && !strnicmp(java, "java", 4))
  -        arglen = strlen(java) + 1;
  +    if (*java && !strnicmp(*java, "java", 4))
  +        arglen = strlen(*java) + 1;
       else if (proc->service.name)
           arglen = strlen(proc->service.name) + 1;
       for (n = i; n < argc; n++) {
  @@ -1675,8 +1683,8 @@
       if (arglen) {
           ++arglen;
           proc->argw = (char *)pool_calloc(proc->pool, arglen);
  -        if (java && !strnicmp(java, "java", 4))
  -            strcpy(proc->argw, java);
  +        if (*java && !strnicmp(*java, "java", 4))
  +            strcpy(proc->argw, *java);
           else
               strcpy(proc->argw, proc->service.name);
           for (n = i; n < argc; n++) {
  @@ -1691,8 +1699,8 @@
               DBPRINTF1("Adding cmdline %s\n", argv[n]);
           }
       }
  -    if (!display)
  -        display = proc->service.name;
  +    if (!*display)
  +        *display = proc->service.name;
       if (!proc->service.startup)
           proc->service.startup = SERVICE_AUTO_START;
       return 0;
  @@ -1762,7 +1770,7 @@
   {
       SC_HANDLE service;
       SC_HANDLE manager;
  -    char path[MAX_PATH+1];
  +    char path[MAX_PATH+1] = {0};
       char *display = NULL;
       char *java = NULL;
   
  @@ -1770,13 +1778,13 @@
           return -1;
       }
   
  -    if (!process_args(proc, argc, argv, display, java, path)) {
  -         DBPRINTF0("Installing service: process_args failed\n");
  +    if (process_args(proc, argc, argv, &display, &java, path)) {
  +         DBPRINTF0("Installing NT service: process_args failed\n");
            return -1;
       }
        
   
  -    DBPRINTF1("Installing service %s\n", path);
  +    DBPRINTF2("Installing NT service %s %s", path, display);
   
       manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
       if (!manager) {    
  @@ -1818,7 +1826,7 @@
   {
       HKEY        hkey;
       DWORD rv;
  -    char szPath[MAX_PATH+1];
  +    char szPath[MAX_PATH+1] = {0};
   
       char path[MAX_PATH+1];
       char *display = NULL;
  @@ -1837,7 +1845,7 @@
           return -1;
       }
   
  -    if (!process_args(proc, argc, argv, display, java, path)) {
  +    if (!process_args(proc, argc, argv, &display, &java, path)) {
            DBPRINTF0("Installing service: process_args failed\n");
            return -1;
       }
  @@ -2281,11 +2289,20 @@
       char event[64];
       DWORD fired;
       int   rv = -1;
  +    OSVERSIONINFO osver;
  +
       SERVICE_TABLE_ENTRY dispatch_table[] = {
           {NULL, NULL},
           {NULL, NULL}
       };
   
  +   osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  +    if (GetVersionEx(&osver)) {
  +        if (osver.dwPlatformId >= VER_PLATFORM_WIN32_NT)
  +            g_is_windows_nt = 1;
  +    }
  +    DBPRINTF1("OS Version %d", g_is_windows_nt);
  +
       SetConsoleCtrlHandler((PHANDLER_ROUTINE)console_ctrl, TRUE);
       env->m->pool = pool_create();
       env->c->pool = pool_create();
  @@ -2357,25 +2374,25 @@
               service_main(argc, argv);
               break;
           case PROCRUN_CMD_INSTALL_SERVICE:
  -            if (isWindowsNT())
  -              rv = procrun_install_service(env->m, argc, argv);
  +            if (g_is_windows_nt)
  +                rv = procrun_install_service(env->m, argc, argv);
               else
  -              rv = procrun_install_service9x(env->m, argc, argv);
  +                rv = procrun_install_service9x(env->m, argc, argv);
               break;
           case PROCRUN_CMD_UPDATE_SERVICE:
  -            if (isWindowsNT())
  -              rv = procrun_update_service(env->m, argc, argv);
  +            if (g_is_windows_nt)
  +                rv = procrun_update_service(env->m, argc, argv);
               else {
                 // rv = procrun_update_service9x(env->m, argc, argv);
  -              rv = -1;
  -              DBPRINTF0("UPDATE SERVICE is unimplemented on 9x for now");
  +                rv = -1;
  +                DBPRINTF0("UPDATE SERVICE is unimplemented on 9x for now");
               }
               break;
           case PROCRUN_CMD_DELETE_SERVICE:
  -            if (isWindowsNT())
  -              rv = procrun_delete_service(env->m);
  +            if (g_is_windows_nt)
  +                rv = procrun_delete_service(env->m);
               else
  -              rv = procrun_delete_service9x(env->m);
  +                rv = procrun_delete_service9x(env->m);
               break;
           case PROCRUN_CMD_STOP_SERVICE:
               rv = -1;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to