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]