jfclere 02/03/13 15:07:31
Modified: daemon/src/native/nt/service Makefile
Added: daemon/src/native/nt/service instmain.c
Removed: daemon/src/native/nt/service instmain.cpp
Log:
Change the C++ file to a C file.
Revision Changes Path
1.3 +7 -3 jakarta-commons-sandbox/daemon/src/native/nt/service/Makefile
Index: Makefile
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/daemon/src/native/nt/service/Makefile,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Makefile 9 Mar 2002 16:14:42 -0000 1.2
+++ Makefile 13 Mar 2002 23:07:31 -0000 1.3
@@ -1,3 +1,7 @@
-INCLUDE=-I../lib
-../../../../dist/INSTSVC: instmain.cpp
- g++ $(INCLUDE) instmain.cpp -o ../../../../dist/INSTSVC
+INCLUDE=-I../lib -I ../../unix/native
+../../../../dist/INSTSVC: instmain.c arguments.o debug.o
+ gcc $(INCLUDE) instmain.c -o ../../../../dist/INSTSVC arguments.o debug.o
+arguments.o: ../../unix/native/arguments.c
+ gcc -c $(INCLUDE) ../../unix/native/arguments.c
+debug.o: ../../unix/native/debug.c
+ gcc -c $(INCLUDE) ../../unix/native/debug.c
1.1 jakarta-commons-sandbox/daemon/src/native/nt/service/instmain.c
Index: instmain.c
===================================================================
/*
* jsvc.exe install program, create the service JavaService
*/
// includes
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include "moni_inst.h"
/* Definitions for booleans */
typedef enum {
false,
true
} bool;
#include "arguments.h"
VOID Usage()
{
printf( "\r\n - Java service installer\r\n\r\n");
printf( " - Usage :\r\n");
printf( " To install Java service : InstSvc -install ");
printf( " [-home JAVA_HOME] [-Dproperty=value]\r\n");
printf( " [-cp CLASSPATH] startclass\r\n");
printf( " Like:\r\n");
printf( " InstSvc -install -home c:\\jdk1.3.1_02");
printf( " -Dcatalina.home=/home1/jakarta/jakarta-tomcat-4.1/build");
printf( " -Djava.io.tmpdir=/var/tmp ");
printf( " -cp \"c:\\jdk1.3.1_02\\lib\\tools.jar;");
printf(
"c:\\home1\\jakarta\\jakarta-tomcat-4.1\\build\\bin\\commons-daemon.jar;");
printf( "c:\\home1\\jakarta\\jakarta-tomcat-4.1\\build\\bin\\bootstrap.jar\"");
printf( " org.apache.catalina.startup.BootstrapService\r\n");
printf( " To remove Java service : InstSvc -remove\r\n\r\n");
printf( " Use regedit if you want to change something\r\n\r\n");
printf( " Note that the service keys are stored under:\r\n");
printf( " HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\");
printf( "%s",SZSERVICENAME);
printf( "\r\n");
printf( " The environment keys in:\r\n");
printf( " ");
printf( "%s",SZKEY_ONSERVE);
printf( "\r\n");
return;
}
/* 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;
SC_HANDLE hService;
SERVICE_STATUS svcStatus;
DWORD dwCount;
removed = FALSE;
// open service control manager with full access right
hManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (NULL != hManager) {
// open existing service
hService = OpenService(hManager, SZSERVICENAME, SERVICE_ALL_ACCESS);
if (NULL != hService) {
// get the status of the service
if (QueryServiceStatus(hService, &svcStatus)) {
// and see if the service is stopped
if (SERVICE_STOPPED != svcStatus.dwCurrentState) {
// if not stop the service
ControlService(hService, SERVICE_CONTROL_STOP, &svcStatus);
}
dwCount = 0;
do {
if (SERVICE_STOPPED == svcStatus.dwCurrentState) {
// delete the service
if (DeleteService(hService)) {
removed = TRUE;
break;
}
}
// wait 10 seconds for the service to stop
Sleep(10000);
if (!QueryServiceStatus(hService, &svcStatus)) {
// something went wrong
break;
}
dwCount++;
} while (10 > dwCount);
}
// close service handle
CloseServiceHandle(hService);
}
// close service control manager
CloseServiceHandle(hManager);
}
return removed;
} /* RemoveSvc */
/* 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) {
printf( "Could not open the RunServices registry key.\r\n");
return FALSE;
}
rv = RegDeleteValue(hkey, SZSERVICENAME);
RegCloseKey(hkey);
if (rv != ERROR_SUCCESS)
printf( "Could not delete the RunServices entry.\r\n");
rv = RegOpenKey(HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services", &hkey);
if (rv != ERROR_SUCCESS) {
printf( "Could not open the Services registry key.\r\n");
return FALSE;
}
rv = RegDeleteKey(hkey, SZSERVICENAME);
RegCloseKey(hkey);
if (rv != ERROR_SUCCESS) {
printf( "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;
SC_HANDLE hService;
installed = FALSE;
// open the service control manager with full access right
hManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (NULL != hManager) {
// create the service
hService = CreateService(hManager,
SZSERVICENAME, // name of the service
SZSERVICEDISPLAYNAME, // description
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS, // type of service
SERVICE_DEMAND_START, // AUTO_START, // startmode
SERVICE_ERROR_NORMAL, // error treatment
svcExePath, // path_name
NULL, // no load order enty
NULL, // no tag identifier.
NULL, // dependencies.
NULL, // LocalSystem account
NULL); // dummy user password
if (NULL != hService) {
// close service handle
CloseServiceHandle(hService);
installed = TRUE;
}
} else {
printf( "OpenSCManager failed\r\n");
}
return installed;
}
/* Install service */
BOOL InstallSvc (CHAR *svcExePath)
{
HKEY hkey;
DWORD rv;
char szPath[MAX_PATH];
printf( "InstallSvc for non-NT\r\n");
rv = RegCreateKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows"
"\\CurrentVersion\\RunServices", &hkey);
if (rv != ERROR_SUCCESS) {
printf( "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) {
printf( "Could not add %s:%s ",SZSERVICENAME, svcExePath);
printf( "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) {
printf( "Could not create/open the %s registry key\r\n",
szPath);
return FALSE;
}
rv = RegSetValueEx(hkey, "ImagePath", 0, REG_SZ,
(unsigned char *) svcExePath,
strlen(svcExePath) + 1);
if (rv != ERROR_SUCCESS) {
RegCloseKey(hkey);
printf( "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) {
printf( "Could not add DisplayName to our Registry Key\r\n");
return FALSE;
}
return TRUE;
}
/*
* Fill the registry with the environment variables
*/
BOOL InstallEnv (char *var, char *value)
{
BOOL installed;
HKEY hKey;
installed = FALSE;
// create the parameters registry tree
log_debug("InstallEnv: %s:%s",var,value);
if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE, SZKEY_ONSERVE, 0,
NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,
&hKey, NULL)) {
// key is created or opened
RegSetValueEx(hKey,var,0,REG_SZ,(BYTE *)value,lstrlen(value)+1);
RegCloseKey(hKey);
installed = TRUE;
}
return installed;
} /* InstallEnv */
/*
* Add the arguments to start jsvc like -Dcatalina.home=/home/jakarta/tomcat.
*/
BOOL InstallEnvParm(int i,char *value)
{
BOOL installed;
HKEY hKey;
char var[64];
sprintf(var,"arg%d",i);
log_debug("InstallEnvParm: %s:%s",var,value);
installed = FALSE;
// create the parameters registry tree
if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE,
SZKEY_ONSERVEARG, 0,
NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,
&hKey, NULL)) {
// key is created or opened
RegSetValueEx(hKey,var,0,REG_SZ,
(BYTE *)value,lstrlen(value)+1);
RegCloseKey(hKey);
installed = TRUE;
}
return installed;
}
/*
* Remove the created keys
*/
BOOL RemoveEnv()
{
HKEY hkey;
DWORD rv;
log_debug("RemoveEnv");
rv = RegOpenKey(HKEY_LOCAL_MACHINE,
NULL,
&hkey);
if (rv != ERROR_SUCCESS) {
printf( "Could not open the jsvc registry key.\r\n");
return FALSE;
}
rv = RegDeleteKey(hkey, SZKEY_ONSERVE);
RegCloseKey(hkey);
if (rv != ERROR_SUCCESS)
printf( "Could not delete the jsvc entry.\r\n");
/* remove the key tree if empty */
return TRUE;
}
/*
* Install or remove the OnServe service and Key in the registry.
* no parameter install the OnServe.
* -REMOVE: desinstall the OnServe service and Keys.
*/
INT main (INT argc, CHAR *argv[])
{
BOOL done;
arg_data *args=NULL;
char szPath[512];
int i;
printf( "\r\n - Copyright (c) 2001 The Apache Software Foundation. \r\n");
printf( "\r\n");
if (GetModuleFileName(NULL, szPath, sizeof(szPath))) {
printf( "%s\r\n",szPath);
}
args=arguments(argc,argv);
if (args==NULL) {
Usage();
return(1);
}
if (args->install==true) {
if (args->home==NULL) {
printf( "home empty or not defined...\r\n\r\n");
Usage();
return(1);
}
if (args->clas==NULL) {
printf( "startclass empty or not defined...\r\n\r\n");
Usage();
return(1);
}
printf( "\r\ninstalling...\r\n\r\n");
/* install jsvcservice.exe as a service */
if (isWindowsNT())
done = InstallSvcNT(SZDEFMONISVCPATH);
else
done = InstallSvc(SZDEFMONISVCPATH);
if (done)
printf( "InstallSvc done\r\n");
else
printf( "InstallSvc failed\r\n");
/* install the environment variable in registry */
/* should get it from szPath */
InstallEnv("JAKARTA_HOME",SZJAKARTA_HOME);
InstallEnv("CYGWIN",SZCYGWINPATH); /* need APR to get ride of it */
InstallEnv("JAVA_HOME",args->home);
InstallEnv("STARTCLASS",args->clas);
if (args->onum==0) return(0);
for(i=0;i<args->onum;i++)
InstallEnvParm(i,args->opts[i]);
return(0);
}
if (args->remove==true) {
// remove the service. removing the keys not yet done!!!
printf( "\r\n - removing Java Service...\r\n\r\n");
if (isWindowsNT())
done = RemoveSvcNT();
else
done = RemoveSvc();
if (!done) {
printf( "\r\n - REMOVE FAILED....\r\n\r\n");
return(2);
}
RemoveEnv();
return(0);
}
printf( "\r\nonly -install or -remove supported...\r\n\r\n");
Usage();
return(1);
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>