You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by jf...@apache.org on 2002/02/10 23:45:26 UTC
cvs commit: jakarta-tomcat-service/native/winnt/service instmain.cpp
jfclere 02/02/10 14:45:26
Modified: native/winnt README
native/winnt/service instmain.cpp
Log:
Add win95/98 support.
Revision Changes Path
1.2 +0 -1 jakarta-tomcat-service/native/winnt/README
Index: README
===================================================================
RCS file: /home/cvs/jakarta-tomcat-service/native/winnt/README,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- README 9 Aug 2001 16:32:23 -0000 1.1
+++ README 10 Feb 2002 22:45:26 -0000 1.2
@@ -9,7 +9,6 @@
- executables/vdmonisvc: project files for the sevice wrapper.
- lib: contains the common include file.
- moni: contains sources of the vdmoniadm and vdmonisvc.
-- moni_nt: contains sources of the service low level routines.
- service: contains the sources and the project for the test installer.
- signals: contains the kill() emulation logic.
- supcalls_nt: contains the environment emulation logic.
1.3 +145 -14 jakarta-tomcat-service/native/winnt/service/instmain.cpp
Index: instmain.cpp
===================================================================
RCS file: /home/cvs/jakarta-tomcat-service/native/winnt/service/instmain.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- instmain.cpp 9 Aug 2001 17:14:51 -0000 1.2
+++ instmain.cpp 10 Feb 2002 22:45:26 -0000 1.3
@@ -25,9 +25,30 @@
cout << "\r\n";
return;
}
-
-
-BOOL RemoveSvc (VOID)
+
+/* from src/os/win32/service.c (httpd-1.3!) */
+
+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;
+}
+
+
+/* remove the service (first stop it!) NT version */
+
+BOOL RemoveSvcNT (VOID)
{
BOOL removed;
SC_HANDLE hManager;
@@ -75,9 +96,44 @@
}
return removed;
} /* RemoveSvc */
-
-
-BOOL InstallSvc (CHAR *svcExePath)
+
+/* remove service (non NT) stopping it looks ugly!!! */
+BOOL RemoveSvc (VOID)
+{
+ HKEY hkey;
+ DWORD rv;
+
+ rv = RegOpenKey(HKEY_LOCAL_MACHINE,
+ "Software\\Microsoft\\Windows\\CurrentVersion\\RunServices",
+ &hkey);
+ if (rv != ERROR_SUCCESS) {
+ cout << "Could not open the RunServices registry key.\r\n";
+ return FALSE;
+ }
+ rv = RegDeleteValue(hkey, SZSERVICENAME);
+ RegCloseKey(hkey);
+ if (rv != ERROR_SUCCESS)
+ cout << "Could not delete the RunServices entry.\r\n";
+
+ rv = RegOpenKey(HKEY_LOCAL_MACHINE,
+ "SYSTEM\\CurrentControlSet\\Services", &hkey);
+ if (rv != ERROR_SUCCESS) {
+ cout << "Could not open the Services registry key.\r\n";
+ return FALSE;
+ }
+ rv = RegDeleteKey(hkey, SZSERVICENAME);
+ RegCloseKey(hkey);
+ if (rv != ERROR_SUCCESS) {
+ cout << "Could not delete the Services registry key.\r\n";
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+/* Install service (NT version) */
+
+BOOL InstallSvcNT (CHAR *svcExePath)
{
BOOL installed;
SC_HANDLE hManager;
@@ -106,9 +162,69 @@
CloseServiceHandle(hService);
installed = TRUE;
}
- }
+ } else {
+ cout << "OpenSCManager failed\r\n";
+ }
return installed;
-} /* InstallSvc */
+}
+
+/* Install service */
+
+BOOL InstallSvc (CHAR *svcExePath)
+{
+ HKEY hkey;
+ DWORD rv;
+ char szPath[MAX_PATH];
+
+ cout << "InstallSvc for non-NT\r\n";
+
+ rv = RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows"
+ "\\CurrentVersion\\RunServices", &hkey);
+ if (rv != ERROR_SUCCESS) {
+ cout << "Could not open the RunServices registry key\r\n";
+ return FALSE;
+ }
+ rv = RegSetValueEx(hkey, SZSERVICENAME, 0, REG_SZ,
+ (unsigned char *) svcExePath,
+ strlen(svcExePath) + 1);
+ RegCloseKey(hkey);
+ if (rv != ERROR_SUCCESS) {
+ cout << "Could not add ";
+ cout << SZSERVICENAME;
+ cout << ":";
+ cout << svcExePath;
+ cout << "to RunServices Registry Key\r\n";
+ return FALSE;
+ }
+
+ strcpy(szPath,
+ "SYSTEM\\CurrentControlSet\\Services\\");
+ strcat(szPath,SZSERVICENAME);
+ rv = RegCreateKey(HKEY_LOCAL_MACHINE, szPath, &hkey);
+ if (rv != ERROR_SUCCESS) {
+ cout << "Could not create/open the ";
+ cout << szPath;
+ cout << " registry key\r\n";
+ return FALSE;
+ }
+ rv = RegSetValueEx(hkey, "ImagePath", 0, REG_SZ,
+ (unsigned char *) svcExePath,
+ strlen(svcExePath) + 1);
+ if (rv != ERROR_SUCCESS) {
+ RegCloseKey(hkey);
+ cout << "Could not add ImagePath to our Registry Key\r\n";
+ return FALSE;
+ }
+ rv = RegSetValueEx(hkey, "DisplayName", 0, REG_SZ,
+ (unsigned char *) SZSERVICEDISPLAYNAME,
+ strlen(SZSERVICEDISPLAYNAME) + 1);
+ RegCloseKey(hkey);
+ if (rv != ERROR_SUCCESS) {
+ cout << "Could not add DisplayName to our Registry Key\r\n";
+ return FALSE;
+ }
+ return TRUE;
+}
/*
* Fill the registry with the environment variables
@@ -126,8 +242,8 @@
// key is created or opened
RegSetValueEx(hKey,var,0,REG_SZ,(BYTE *)value,lstrlen(value)+1);
RegCloseKey(hKey);
- }
installed = TRUE;
+ }
return installed;
} /* InstallEnv */
@@ -139,11 +255,22 @@
INT main (INT argc, CHAR *argv[])
{
-
- cout << "\r\n - Copyright (C) 1998 by Siemens Nixdorf Informationssystem AG\r\n\r\n";
+ BOOL done;
+
+ cout << "\r\n - Copyright (c) 2001 The Apache Software Foundation. \r\n";
+ cout << "\r\n";
+
if (argc==1) {
/* install jsvcservice.exe as a service */
- InstallSvc(SZDEFMONISVCPATH);
+ if (isWindowsNT())
+ done = InstallSvcNT(SZDEFMONISVCPATH);
+ else
+ done = InstallSvc(SZDEFMONISVCPATH);
+
+ if (done)
+ cout << "InstallSvc done\r\n";
+ else
+ cout << "InstallSvc failed\r\n";
/* install the environment variable in registry */
InstallEnv("JAKARTA_HOME",SZJAKARTA_HOME);
@@ -158,8 +285,12 @@
if (argc==2 && strcmp(argv[1],"-REMOVE")==0) {
// remove the service. removing the keys not yet done!!!
- cout << "\r\n - removing Java Service...\r\n\r\n";
- if (RemoveSvc()) {
+ cout << "\r\n - removing Java Service...\r\n\r\n";
+ if (isWindowsNT())
+ done = RemoveSvcNT();
+ else
+ done = RemoveSvc();
+ if (!done) {
cout << "\r\n - REMOVE FAILED....\r\n\r\n";
return(2);
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>