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]