poniedziałek, 25 października 2010

Instalacja, obsługa usługi serwera Apache 2.x w InstallShield

Funkcja pozwala na zainstalowanie, deinstalację, aktualizację, uruchomienie, zatrzymanie usługi serwera Apache

Parametry:
  • szPath - ścieżka do zainstalowanego serwera
  • szFile - nazwa pliku serwera Apache
  • nAction - wybrana akcja 0..4 (patrz poniżej)
  • bLog - czy rejestrować w logu informacje


    Uwaga: Funkcja korzysta z zewnętrznej funkcji SdShowMsgWait()

    function BOOL ApacheService(szPath, szFile, szService, nAction, bLog)
    BOOL bResult;
    STRING szAction, szLog, szMsg;
    number nvState;
    begin
     bResult = FALSE;
     switch (nAction)
      case 0: if (StrLength(szService)=0) then
         szAction = " -k stop ";
         szLog = "- zatrzymanie usługi Apache";                 
        else
         szAction = " -k stop -n \""+szService+"\" ";
         szLog = "- zatrzymanie usługi Apache jako \""+szService+"\"";    
        endif; 
        szMsg = "Zatrzymanie serwera Apache...";
      case 1: if (StrLength(szService)=0) then
         szAction = " -k start ";
         szLog = "- uruchomienie usługi Apache";            
        else
         szAction = " -k start -n \""+szService+"\" ";
         szLog = "- uruchomienie usługi Apache jako \""+szService+"\"";    
        endif; 
        szMsg = "Uruchomienie serwera Apache...";
      case 2: if (StrLength(szService)=0) then
         szAction = " -k restart ";
         szLog = "- restart usługi Apache";            
        else
         szAction = " -k restart -n \""+szService+"\" ";
         szLog = "- restart usługi Apache jako \""+szService+"\"";    
        endif; 
        szMsg = "Restart serwera Apache...";
      case 3: if (StrLength(szService)=0) then
         szAction = " -k install ";
         szLog = "- instalacja usługi Apache";            
        else
         szAction = " -k install -n \""+szService+"\" ";
         szLog = "- instalacja usługi Apache jako \""+szService+"\"";            
        endif; 
        szMsg = "Instalacja usługi serwera Apache...";
      case 4: if (StrLength(szService)=0) then
         szAction = " -k uninstall ";
         szLog = "- deinstalacja usługi Apache";              
        else
         szAction = " -k uninstall -n \""+szService+"\" ";
         szLog = "- deinstalacja usługi Apache jako \""+szService+"\"";              
        endif; 
        szMsg = "Deinstalacja usługi serwera Apache...";
     endswitch;
     
     if (StrLength(szService)=0) then szService = "Apache2.2"; endif;
     
     if Is(FILE_EXISTS, szPath ^ szFile) then 
      SdShowMsgWait(szMsg, nProgress, 8, TRUE); 
      if (bLog) then WriteLog(1,szLog); endif;
      if LaunchApplication(szPath ^ szFile, szAction, szPath, SW_HIDE, 0,  LAAW_OPTION_USE_SHELLEXECUTE |
     LAAW_OPTION_WAIT | LAAW_OPTION_SHOW_HOURGLASS)=ISERR_SUCCESS then
       Sleep(1000); //Tak na wszelki słuczaj
       switch (nAction) 
        //STOP//
        case 0: if ServiceExistsService(szService) then
           repeat              
            Sleep(500);
                        ServiceGetServiceState (szService, nvState );                                                                      
                  SdShowMsgWait(szMsg, nProgress, 8, TRUE);                       
                 until (nvState = SERVICE_STOPPED);                  
           if (nvState = SERVICE_STOPPED) then 
            if (bLog) then WriteLog(2,"- usługa \""+szService+"\" zatrzymana"); endif;       
            bResult = TRUE;
           endif; 
          else
           if (bLog) then WriteLog(2,"- nie można zatrzymać usługi \""+szService+"\", usługa nie jest zainstalowana w systemie!"); endif;       
           bResult = TRUE;
          endif;
        
        //START//
        case 1: if ServiceExistsService(szService) then
           repeat        
            Sleep(500);      
            ServiceGetServiceState(szService, nvState);
            SdShowMsgWait(szMsg, nProgress, 8, TRUE);                       
           until (nvState = SERVICE_RUNNING)||(nvState = SERVICE_STOPPED);                   
           if (nvState = SERVICE_RUNNING) then 
            if (bLog) then WriteLog(2,"- usługa \""+szService+"\" uruchomiona"); endif;       
            bResult = TRUE;
           endif; 
           if (nvState = SERVICE_STOPPED) then 
            if (bLog) then WriteLog(2,"- usługa \""+szService+"\" nie została uruchomiona"); endif;       
            bResult = FALSE;
           endif;
          else
           if (bLog) then WriteLog(2,"- nie można uruchomić usługi \""+szService+"\", usługa nie jest zainstalowana w systemie!"); endif;       
          endif;
          
        //INSTALL//
        case 3: if ServiceExistsService(szService) then
           if (bLog) then WriteLog(2,"- usługa \""+szService+"\" zainstalowana"); endif;       
           bResult = TRUE; 
          else
           if (bLog) then WriteLog(2,"- nie można zainstalować usługi \""+szService+"\", błąd instalacji usługi"); endif;         
          endif;    
        
        //UNINSTALL//  
        case 4: if !ServiceExistsService(szService) then
           if (bLog) then WriteLog(2,"- usługa \""+szService+"\" usunięta"); endif;       
           bResult = TRUE;  
          else
           if (bLog) then WriteLog(2,"- nie można odinstalować usługi \""+szService+"\", błąd deinstalacji usługi"); endif;          
          endif;      
          
       endswitch;
       
       
         else  
          bResult = FALSE;
          if (bLog) then WriteLog(1,"Błąd uruchomienia serwisu: \""+szPath ^ szFile+"\" parametr:\""+szAction+"\""); endif;
         endif;
         
          SdShowMsgWait(szMsg, nProgress, 8, FALSE);
         
     else  
      if bLog then WriteLog(1,"Brak pliku \""+szPath ^ szFile+"\" "); endif;
     endif;
     
     return bResult;
    end;
    
  • Brak komentarzy:

    Prześlij komentarz