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]>

Reply via email to