poniedziałek, 17 stycznia 2011

Wykonanie zapytania na bazie MS-SQL w InstallScript

Funkcja wykonuje zapytanie SQL i zwraca wartości z pierwszej kolumny w zmiennej "svWynik"; Funkcja zwraca true/false w przypadku poprawnego/błędnego wykonania zapytania.

function BOOL QuerySQL(sSQL,sServerName, sDBName, sDriver, bTrustedConn, 
sUserName, sUserPwd, svWynik, bLog)
 OBJECT objConn, objRST, pADORecordSetObj,adoCommand; 
 STRING sTekst, sConnString;         
 STRING  szADOConnObjID,szADORecordSetObjID; 
 STRING szError;
 BOOL bReturn;
begin
 bReturn = FALSE;
 
    if (sDriver == "") then sConnString = "Provider=sqloledb;Persist Security Info=False;";
                    else sConnString = "Driver={" + sDriver + "};Persist Security Info=False;";
    endif;
    
    if (bTrustedConn) then
 sConnString = sConnString + "server=" + sServerName + ";";
 sConnString = sConnString + "database=" + sDBName + ";";
 sConnString = sConnString + "Trusted_connection=Yes";
else
 sConnString = sConnString + "server=" + sServerName + ";";
 sConnString = sConnString + "uid=" + sUserName + ";";
 sConnString = sConnString + "pwd=" + sUserPwd + ";";
 sConnString = sConnString + "database=" + sDBName;
endif;
 
    try
 szADOConnObjID = "ADODB.Connection";
 set objConn = CreateObject(szADOConnObjID);         
    
 if (IsObject(objConn)) then 
objConn.ConnectionString = sConnString;
    objConn.Open;                              
    szADORecordSetObjID = "ADODB.Recordset";
    set pADORecordSetObj = CreateObject(szADORecordSetObjID);
    
    pADORecordSetObj.CursorType = 3;    
    pADORecordSetObj.ActiveConnection = objConn;    
    pADORecordSetObj.Open(sSQL);    
 if ((pADORecordSetObj.RecordCount >= 1)||(pADORecordSetObj.RecordCount = -1)) then
    while (!pADORecordSetObj.EOF) 
  svWynik =  pADORecordSetObj(0);
   pADORecordSetObj.MoveNext;          
    endwhile; 
    
 if (StrLength(svWynik)>0) then bReturn = TRUE;
      else bReturn = FALSE;
 endif;  
    
 if ((bLog)&&(!bReturn)) then WriteLog(2," Wynik zapytania jest pusty"); endif;  
 else
 bReturn = FALSE; 
 endif;                                          
    
 set pADORecordSetObj = NOTHING;
 objConn.Close;
   
 else
     if (bLog) then WriteLog(1,"Nie moża utworzyć obiektu połączenia ADODB.Connection do "+sDBName); endif;  
 endif;
  
 set objConn = NOTHING;
 set objRST  = NOTHING;
  
 catch  
    if (bLog) then WriteLog(1,"Błąd wykonania zapytania SQL"); endif;  
 endcatch;
                      
 return (bReturn);
end;   

Usuwanie użytkownika bazy MS-SQL w InstallScript

Funkcja usuwa użytkownika bazy MS-SQL, zwraca true/false w przypadku powodzenia/porażki.
function BOOL DB_DropUser(sUserToDrop, sServerName, sDBName, sDriver, bTrustedConn, 
sUserName, sUserPwd, bLog)
OBJECT objConn, objRST;   
STRING sConnString;  
STRING  szADOConnObjID, sSQL;
BOOL bResult;
begin
    bResult = FALSE;
    if (sDriver == "") then
     sConnString = "Provider=sqloledb;";
    else
     sConnString = "Driver={" + sDriver + "};";
    endif;

 if (bTrustedConn) then
     sConnString = sConnString + "server=" + sServerName + ";";
     sConnString = sConnString + "database=" + sDBName + ";";
     sConnString = sConnString + "Trusted_connection=Yes";
 else
     sConnString = sConnString + "server=" + sServerName + ";";
  sConnString = sConnString + "uid=" + sUserName + ";";   
  sConnString = sConnString + "pwd=" + sUserPwd + ";";
  sConnString = sConnString + "database=" + sDBName;                                        
 endif;   
 
 try
  szADOConnObjID = "ADODB.Connection";
     set objConn = CreateObject(szADOConnObjID);         
    
  if (IsObject(objConn)) then 
   objConn.ConnectionString = sConnString;
   objConn.Open;                            
      
   sSQL = "IF EXISTS (SELECT * FROM sysusers WHERE name='"+sUserToDrop+"') 
BEGIN EXEC dbo.sp_revokedbaccess N'"+sUserToDrop+"' END;";   
   try
    set objRST = objConn.Execute(sSQL);
    bResult = TRUE; //Wykonano
   catch                      
     bResult = FALSE; //Błąd wykonania
     if (bLog) then WriteLog(1," - błąd usuwania loginu \""+sUserToDrop+"\" 
z bazy \""+sDBName+"\""); endif;
   endcatch;
         
         objConn.Close;         
         
  endif;
    
  set objConn = NOTHING;
  set objRST  = NOTHING;
  
 catch  
  if (bLog) then WriteLog(1," - Nie można uzyskać połączenia z bazą 
na użytkownika \""+sUserName+"\""); endif;  
 endcatch;     
 
    return bResult; 
end;

Tworzenie użytkownia bazy MSSQL w InstallScript

Funkcja dodaje użytkownika do bazy danych serwera MS-SQL, zwraca true/false po wykonaniu.

function BOOL DB_CreateUser(sUserToCreate, sUserPwd, sServerName, sDBName, sDriver, 
bTrustedConn, sUserSA, sUserSAPwd,  bLog)
OBJECT objConn, objRST;   
STRING sConnString;  
STRING  szADOConnObjID, sSQL;
BOOL bResult,bResult1;
begin
    bResult = FALSE;
    if (sDriver == "") then
     sConnString = "Provider=sqloledb;";
    else
     sConnString = "Driver={" + sDriver + "};";
    endif;
 if (bTrustedConn) then 
     sConnString = sConnString + "server=" + sServerName + ";";
  sConnString = sConnString + "database=" + sDBName + ";";
  sConnString = sConnString + "Trusted_connection=Yes";
 else  
     sConnString = sConnString + "server=" + sServerName + ";";
  sConnString = sConnString + "uid=" + sUserSA + ";";     
  sConnString = sConnString + "pwd=" + sUserSAPwd + ";";
  sConnString = sConnString + "database=" + sDBName;                                        
 endif;   
 
 try
  szADOConnObjID = "ADODB.Connection";
     set objConn = CreateObject(szADOConnObjID);         
    
  if (IsObject(objConn)) then 
   objConn.ConnectionString = sConnString;
   objConn.Open;                               

   try         
    sSQL = "IF  NOT EXISTS (SELECT * FROM master.dbo.syslogins WHERE 
loginname='"+sUserToCreate+"') \r\n";
    sSQL = sSQL + "BEGIN \r\n";     
          sSQL = sSQL + "EXEC ('CREATE LOGIN "+sUserToCreate+" WITH PASSWORD=N''"+sUserPwd+"'', 
DEFAULT_DATABASE="+sDBName+", CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF') \r\n";          
             sSQL = sSQL + "END ";
    set objRST = objConn.Execute(sSQL);  
          bResult = TRUE; //Wykonano
         catch                                                                                       
          bResult = FALSE; //Nie wykonano                                
         endcatch;   
         
         if !bResult then //Jezeli pierwszy sposob sie nie wykonal to drugi 
         try         
    sSQL = "IF  NOT EXISTS (SELECT * FROM master.dbo.syslogins WHERE 
loginname='"+sUserToCreate+"') \r\n";
    sSQL = sSQL + "BEGIN \r\n";     
    sSQL = sSQL + "EXEC sp_addlogin @loginame = '"+sUserToCreate+"', 
@passwd = '"+sUserPwd+"', @defdb = '"+sDBName+"' \r\n";                       
             sSQL = sSQL + "END ";
    set objRST = objConn.Execute(sSQL);  
          bResult1 = TRUE; //Wykonano       
          bResult = TRUE;
         catch                                                                                       
          bResult1 = FALSE; //Nie wykonano                                
         endcatch;            
         endif;      
         
         if (!bResult) && (!bResult1) then
          if (bLog) then WriteLog(1,"Błąd dodanie użytkownika \""+sUserToCreate+"\" 
do serwera SQL"); endif;
         endif;         
         objConn.Close;                  
  endif;
    
  set objConn = NOTHING;
  set objRST  = NOTHING;  
 catch  
  if (bLog) then WriteLog(1," - Nie można uzyskać połączenia z bazą 
na użytkownika \""+sUserToCreate+"\""); endif;  
 endcatch;      
    return bResult; 
end;

piątek, 14 stycznia 2011

Pobranie wielkości bazy MSSQL

Funkcja pobiera wielkość bazy odczytując wielkość pliku z serwera MSSQL bazy
function BOOL GetDataBaseSize(sQuery, sValueName, sValue, sServerName, sDBName, sDBFileName, sDriver, bTrustedConn, sUserName, sUserPwd, bLog)
 OBJECT objConn, objRST;     
 STRING  szADOConnObjID;
 STRING sTekst, sConnString;
 BOOL bReturn;
begin
 bReturn = FALSE;  
    if (sDriver == "") then
     sConnString = "Provider=sqloledb;";
    else
     sConnString = "Driver={" + sDriver + "};";
    endif;

 if (bTrustedConn) then
     sConnString = sConnString + "server=" + sServerName + ";";
       sConnString = sConnString + "database=" + sDBName + ";";
     sConnString = sConnString + "Trusted_connection=Yes";
 else

     sConnString = sConnString + "server=" + sServerName + ";";
  sConnString = sConnString + "uid=" + sUserName + ";";
  sConnString = sConnString + "pwd=" + sUserPwd + ";";
  sConnString = sConnString + "database=" + sDBName;
 endif;
 

 szADOConnObjID = "ADODB.Connection";
 set objConn = CreateObject(szADOConnObjID);         
 if (IsObject(objConn)) then 
   objConn.ConnectionString = sConnString;
   objConn.Open;   
   set objRST = objConn.Execute("select sum(size)*8/1024 as size from sysfiles");     
   sValue = objRST(sValueName);                                         
 set objRST = objConn.Execute("select filename from sysfiles where filename like '%.mdf%' ");
 sDBFileName = objRST("filename");                                           
 objConn.Close;   
 bReturn  = TRUE;   
   
 else
     if (bLog) then WriteLog(1,"Nie moża utworzyć obiektu połączenia ADODB.Connection"); endif;  
 endif;
  
  set objConn = NOTHING;
  set objRST  = NOTHING;
 
 return (bReturn);
end;

czwartek, 28 października 2010

Restart systemu podczas instalacji i kontynuowanie InstallShield

Prosta funkcja, która pozwala zapisać parametry restartu systemu i uruchomienie instalatora z odpowiednimi parametrami

function VOID RestartAndRun(szParams)
string RegPath,sVersion,sVer;
number nSize,nType,nResult;
begin
  RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);          
  RegPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce";
  nType = REGDB_STRING; 
  nSize = -1;
  RegDBSetKeyValueEx (RegPath, "setup.exe", nType, szParams, nSize);
  
end;

Odczyt wersji zdalnego serwera SQL InstallShield

Funkcja odczytuje wersję serwera SQL. Wymaganiem jest podanie użytkownika z dostępem do bazy master serwera.
Parametry:
-sServerName - nazwa serwera zdalnego (z instancją)
-sUserName - nazwa użytkownika
-sUserPwd - hasło użytkownika
- bLog - zapis do pliku log
Wartości zwracane:
-1 - nie udało się pobrać wersji serwera
80 - SQL2000
90 - SQL2005
100 -SQL2008

function int GetRemoteSQLVersion(sServerName, sUserName, sUserPwd,  bLog)
OBJECT objConn, objRST;      
STRING sConnString;  
STRING  szADOConnObjID;
STRING sSQL,szVersion, szVer;
int nResult;
begin
 nResult = -1;

     sConnString = "Driver={SQL Server};Persist Security Info=False;";
     sConnString = sConnString + "server=" + sServerName + ";";
  sConnString = sConnString + "uid=" + sUserName + ";";                                                       
  sConnString = sConnString + "pwd=" + sUserPwd + ";";
  sConnString = sConnString + "database=master"; 
 
  sSQL = "SELECT SERVERPROPERTY('ProductVersion') AS ProductVersion";
 try
  if (bLog) then WriteLog(0,"* Odczyt wersji Serwera SQL..."); endif;
  
  szADOConnObjID = "ADODB.Connection";
     set objConn = CreateObject(szADOConnObjID);         
    
  if (IsObject(objConn)) then 
   objConn.ConnectionString = sConnString;
   //objConn.CommandTimeout = 999999;   
   objConn.Open;                            
         set objRST = objConn.Execute(sSQL);                    
   szVersion = objRST("ProductVersion");   
         if (StrLength(szVersion)>0) then
          StrSub(szVer,szVersion,0,StrFind(szVersion,"."));                    
          switch (szVer)
            case "8" : nResult=80; if (bLog) then WriteLog(1,"- Serwera SQL 2000"); endif;
            case "9" : nResult=90; if (bLog) then WriteLog(1,"- Serwera SQL 2005"); endif;
            case "10": nResult=100;if (bLog) then WriteLog(1,"- Serwera SQL 2008"); endif;
          endswitch;                   
         endif;         
         objConn.Close;         
  endif;
  
  set objConn = NOTHING;    
  set objRST  = NOTHING;
  
 catch  
  if (bLog) then WriteLog(1," - Nie można uzyskać połączenia z bazą master na 
użytkownika \""+sUserName+"\""); endif;    
 endcatch;
 
 return nResult; 
end;

Odczyt prędkości procesora InstallShield

Funkcja zwraca wartość numeryczną podaną w MHz - pierwszego jądra procesora

function NUMBER GetCPUSpeed( bLog)
STRING svValue;
NUMBER nvType, nvSize, nSpeed;

begin
    RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
    nvSize = -1;
    nvType  = REGDB_STRING;
    RegDBGetKeyValueEx("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",
 "~MHz", nvType, svValue, nvSize);
    if (bLog) then WriteLog(1,"- taktowanie procesora: "+svValue+"MHz"); endif;    
    StrToNum(nSpeed,svValue);
    return nSpeed;
end;

Uruchomienie domyślnej przeglądarki z adresem URL strony InstallShield

Funkcja Otwiera stronę o podanym adresie URL (szlink) w domyślnej przeglądarce internetowej
Parametry:
-szlink - adres URL strony
-bLog - zapis do pliku log
Wartości zwracane: true/false;

function BOOL StartWebPage(szlink, bLog)
LIST listSubKeys;
STRING KLUCZ, sKey;
NUMBER nReturn, nType, nSize;
BOOL bResult;
begin
 if (bLog) then WriteLog(0,"* Uruchomienie przeglądarki ze stroną:"+szlink); endif;
 bResult = FALSE;
 
 RegDBSetDefaultRoot(HKEY_CLASSES_ROOT); 
    KLUCZ = "http\\shell\\open\\command"; 
    if (RegDBGetKeyValueEx(KLUCZ, "", nType , sKey, nSize )=0 ) then
    
     StrReplace(sKey,'"','',0);
     if (StrFind(sKey,"exe")>0) then
        StrSub(sKey, sKey,0,StrFind(sKey,"exe")+3);       
     endif;
      
     sKey = '"' + sKey + '"';
     
     
     if (LaunchApplication (sKey, szlink, "", SW_NORMAL, 0, LAAW_OPTION_USE_SHELLEXECUTE | 
LAAW_OPTION_NOWAIT | LAAW_OPTION_SHOW_HOURGLASS)== ISERR_SUCCESS ) then
     //if LaunchApp(sKey, szlink)=0 then
      bResult = TRUE; 
      if (bLog) then WriteLog(2,"-uruchomiono"); endif;
     else
      if (bLog) then 
       WriteLog(2,"-nie udało się uruchomić przeglądarki"); 
       WriteLog(2," polecenie: "+sKey+", parametr: "+szlink);       
      endif; 
     endif;
    else    
     if (bLog) then WriteLog(1,"- nie mogę odczytać klucza: HKEY_CLASSES_ROOT\\"+ KLUCZ); endif;      
    endif;
    
    return bResult;
end;

Odczyt ścieżki do pliku php.ini z konfiguracji serwera Apache

Funkcja umożliwia pobranie ścieżki do pliku php.ini bezpośrednio z pliku konfiguracji serwera Apache.
Parametry:
-szApacheConfigFile - ścieżka z plikiem konfiguracji apache
-svPHPIniDir - parametr referencyjny (zwraca ścieżkę pliku php.ini)
-bLog - plik log
Uwaga: Parametr svPHPIniDir jest wskaźnikiem i musi być wcześniej zadeklarowany
Wartości zwracane: true/false - chyba jasne :)

function BOOL GetApachePHPIniDir(szApacheConfigFile, svPHPIniDir, bLog)
BOOL bResult;
LIST lsApache;
string szLine;
int i;
begin
 if (bLog) then WriteLog(0,"* Pobieranie scieżki do php ini z konfiguracji Apache..."); endif;
 bResult = FALSE;
 if (Is(FILE_EXISTS,szApacheConfigFile)) then
  lsApache = ListCreate(STRINGLIST);
  ListReadFromFile ( lsApache, szApacheConfigFile ); //Odczyt Apache Conf
  if (ListCount(lsApache)>0) then         
          ListSetIndex(lsApache,LISTFIRST);          
      for i=0 to ListCount(lsApache)-1        
       ListCurrentString ( lsApache, szLine ); 
     szLine = StrTrim(szLine);
     if (StrFind(szLine, "PHPIniDir")=0) then
      StrSub(svPHPIniDir, szLine, 9, StrLength(szLine));
      svPHPIniDir = StrTrim(svPHPIniDir);
      StrReplace(svPHPIniDir,'"','',0);
      StrReplace(svPHPIniDir,"/","\\",0);
      if (bLog) then WriteLog(1,"- ścieżka do php.ini: "+svPHPIniDir); endif;
      bResult = TRUE;
       endif;
       ListSetIndex(lsApache,LISTNEXT);
      endfor; 
    endif;    
 endif;
 
 ListDestroy(lsApache);
 
 return bResult;
end;

Instalacja serwera Apache w trybie cichym w Installshield

Funkcja Instaluje Serwer Apache w trybie cichym.
Parametry:
- szPlik - Plik instalatora msi
- szPort - Port na którym serwer Apache ma prowadzić nasłuch
- szService - nazwa serwisu Apache
- bLog - zapisywanie wyniku do pliku log
Wartości zwracane: false/true

function BOOL InstallApacheServer(szPlik, szPort, szService, bLog)
string szParams;
BOOL bResult;
number nResult;
begin
 bResult = FALSE; 
 if (bLog) then WriteLog(0,"* Instalacja serwera Apache..."); endif;  
 szParams = " /i \""+szPlik+"\" /passive /l \""+TARGETDIR ^ "apache_install.log\"
 SERVERADMIN=admin@localhost SERVERPORT="+szPort;
 if (LaunchApplication(WINSYSDIR ^ "msiexec.exe", szParams, "" , SW_HIDE, 0, 
LAAW_OPTION_USE_SHELLEXECUTE | LAAW_OPTION_WAIT | LAAW_OPTION_SHOW_HOURGLASS )<0) then
  WriteLog(2,"Błąd: Nie można zainstalować serwera Apache ");
     MessageBox ("Nie można zainstalować Serwera Apache", SEVERE);
    else
     while ((!(Is(FILE_EXISTS, TARGETDIR ^ "apache_install.log"))) || 
( (Is(FILE_EXISTS, TARGETDIR ^ "apache_install.log"))&&
(Is(FILE_LOCKED,TARGETDIR ^ "apache_install.log")) )  );
      Sleep(200);
     endwhile;
     bResult = TRUE;                
     if (bLog) then WriteLog(2,"-zainstalowano serwer, nasłuch na porcie:"+szPort+""); endif;
    endif; 
 return bResult;
end;

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;
    
  • Instalacja usługi Apache Tomcat 6.x

    Funkcja pozwala zainstalować usługę, zatrzymać, uruchomić, zaaktualizować parametry usługi i deinstalować usługę Apache Tomcat
    Parametry:
    szPath - ścieżka zainstalowanego serwera Apache Tomcat 6.x
    nAction - 0..5 wybrana akcja dotycząca usługi
    szParams - można pominąć - future
    bLog - zapis do logu informacji
    function BOOL TomcatService(szPath, nAction, szParams, bLog)
    BOOL bResult;
    STRING szLog, szProgram, szAction;
    begin 
     switch (nAction)
      case 0: szAction = '//TS//';
        szLog = " uruchomienie usługi Tomcat jako aplikacja konsolowa";            
      case 1: szAction = '//SS//';   
        szLog = " zatrzymanie usługi Tomcat";            
      case 2: szAction = '//US//';
        szLog = " aktualizacja parametrow usługi Tomcat";                 
      case 3: szAction = '//IS//';
        szLog = " instalacja usługi Tomcat";                   
      case 4: szAction = '//DS//Tomcat6';
        szLog = " deinstalacja usługi Tomcat";                     
     endswitch;                             
     
     if Is(FILE_EXISTS, szPath ^ "tomcat6.exe") then
      szProgram = szPath ^ "tomcat6.exe";
      if LaunchApplication(szProgram, szAction, szPath, SW_HIDE, 0, LAAW_OPTION_USE_SHELLEXECUTE | 
    LAAW_OPTION_WAIT | LAAW_OPTION_SHOW_HOURGLASS)=ISERR_SUCCESS then
          bResult = TRUE;  
         else  
          bResult = FALSE;
         endif;
     else  
      if bLog then WriteLog(1,"Brak pliku \"tomcat6.exe\" "); endif;
     endif;
     
     return bResult;             
    end;

    ListaBox z włączonym lub wyłączonym stylem LBS_EXTENDEDSEL

    Przy tworzeniu okna dialogowego jest możliwość ustawienia właściwości LBS_EXTENDEDSEL,
    dzięki której możemy wybrać kilka elementów jednocześnie z listy.
    Problem pojawia się jeżeli chcemy ustawić właściwość listy dynamicznie w procesie
    inicjacji okna. Niestety nie ma możliwości zmiany stylu okna już utworzonego
    w InstallShield.
    Prostym rozwiązaniem jest utworzenie 2 obiektów ListBox z różnymi stylami
    i wyświetlanie odpowiedniej w razie potrzeby. Trudniejszym - dynamiczne
    utworzenie listy w Oknie dialogowym.