alex 96f33c01ee Patch level : 4.0 979
Files correlati     : ve6.exe
Ricompilazione Demo : [ ]
Commento            :

Riportata la versione 3.1 patch 979


git-svn-id: svn://10.65.10.50/trunk@15623 c028cbd2-c16b-5b4b-a496-9718f37d4682
2007-09-17 15:33:04 +00:00

605 lines
19 KiB
Plaintext
Executable File
Raw Blame History

//________________________________________________________________________________________________________________________
// *** Compila il file Campo.ini
function _SetCampoIni( )
STRING szTmpPath[_MAX_LENGTH], szPrgPath[_MAX_LENGTH], szTestData, szTestProg;
NUMBER nPos;
begin
StrToLower (szTmpPath, szCampoIni);
nPos = StrFind(szTmpPath,"campo.ini");
StrSub (szPrgPath, szTmpPath, 0, nPos);
if ( CreateDir( szPrgPath ) < 0 ) then
_Errore( STR_DIR_NOTCREATED );
endif;
ChangeDirectory( szPrgPath);
// scrive le stesse cose nel file unico campo.ini , se esiste
szTmpPath=szPrgPath ^ "CAMPO.INI";
//non scrive nulla in caso di aggiornamento di una vecchia installazione
if (nReinstall <= 0) then
WriteProfString(szTmpPath, "Main", "MailTo","");
WriteProfString(szTmpPath, "Main", "MaxHandles","32");
WriteProfString(szTmpPath, "Main", "Program",szAppRefPath);
WriteProfString(szTmpPath, "Main", "Study",szDataPath);
WriteProfString(szTmpPath, "Main", "Firm","COM");
szTestData = "";
szTestProg = "";
//SOLO se e' una installazione locale puo' fare il test del database (con conversione!)
if (!bInstallNetWrkChk) then
szTestData = "X";
szTestProg = "N";
endif;
//se ho i programmi in locale ed idati in remoto posso fare l'aggiornamento dei programmi (NON dei dati)
if (bInstallNetWrkChk) then
szTestData = "N";
szTestProg = "X";
endif;
//in caso di campo wst (tutto in remoto) NON testi un tubo!
WriteProfString(szTmpPath, "Main", "TestDatabase",szTestData );
WriteProfString(szTmpPath, "Main", "TestPrograms",szTestProg );
endif;
if (bInstallPrg) then
if ((bUseDongleServer) && (!_TCPIPPresent())) then
szDongleServerName="";
_Attenzione("Impossibile utilizzare il server di rete delle autorizzazioni: \nprotocollo TCP-IP non rilevato");
endif;
WriteProfString(szTmpPath, "Server", "Dongle" , szDongleServerName);
endif;
szTmpPath=szPrgPath ^ "INSTALL.INI";
if (bInstallNetWrkChk) then
WriteProfString(szTmpPath, "Main", "DiskPath",szAppRefPath);
endif;
end;
//________________________________________________________________________________________________________________________
// *** Funzione per cancellare i files minimi per il fascicolatore
function _DeleteFilesMinima( )
NUMBER pDataList, pProgramList, nFile, nFlag, nLen;
STRING szPath [ _MAX_LENGTH ], szFileName [ _MAX_LENGTH ], szFC [ 2 ], szLine [ _MAX_LENGTH ];
begin
if (!bNuovaInst) then
szPath=szAppPath ^ "install.ini";
GetProfString(szPath,"Main","Demo",szFC);
if szFC = "X" then
// cancella tutti gli eseguibili per evitare sovrapposizioni tra versione demo e normale
szPath=szAppPath;
nLen=FindAllFiles(szAppPath, "*.EXE", szFileName, RESET);
while (nLen=0 )
DeleteFile(szFileName);
nLen=FindAllFiles(szAppPath, "*.EXE", szFileName, CONTINUE);
endwhile;
endif;
endif;
end;
//________________________________________________________________________________________________________________________
// *** esegue effettivamente l'installazione dei files minimi di sistema (*.dll,*.vxd, parte della base necessaria a
// *** lanciare poi l'installatore c++)
function _InstallFilesMinima( )
NUMBER nRet, ntDisk, nHandle;
BOOL bRightDisk;
STRING szTemp [_MAX_LENGTH];
STRING szStatusText [_MAX_LENGTH];
begin
// Backup TARGETDIR to local variable
// Define fileset items
// --------------------- //
SetColor(STATUSBAR,BLUE);
Enable(FEEDBACK_OPERATION);
Enable(STATUS);
FileSetBeginDefine ( "WIN");
// ***Eliminata con nuova gestione installazione chiavi! Programma hardlock hldrv32.exe
//if (szOSName != "Windows NT") then
// TARGETDIR = WINDIR ^ "SYSTEM";
// if ( CompressGet( "WINSYS.Z", "*.*", INCLUDE_SUBDIR ) < 0) then
// szText = STR_ERR_DECOMPRESS + " la libreria WINSYS.";
// _Errore( szText );
// endif;
//endif;
FileSetEndDefine ( "WIN");
FileSetBeginDefine ( "SYS");
TARGETDIR = szAppPath;
if ( CreateDir( TARGETDIR ) < 0 ) then
_Errore( STR_DIR_NOTCREATED );
else
if ( CompressGet( "SYS.Z", "*.*", INCLUDE_SUBDIR ) < 0) then
szText = STR_ERR_DECOMPRESS + " l'archivio compresso contenente i files di sistema.";
_Errore( szText );
endif;
if ( CompressGet( "RES.Z", "*.*", INCLUDE_SUBDIR ) < 0) then
szText = STR_ERR_DECOMPRESS + " l'archivio compresso contenente i files delle icone.";
_Errore( szText );
endif;
endif;
FileSetEndDefine ( "SYS");
StrToUpper( szAppPath, szAppPath );
szStatusText = "Installazione su " + szAppPath;
StatusUpdate( ON, 50 );
SetStatusWindow( 0, "Installazione librerie ..." );
_PerformSet ( "WIN");
StatusUpdate( ON, 100 );
SetStatusWindow( 50, "Installazione programmi di ambiente .." );
_PerformSet ( "SYS");
szTemp = szAppPath ^ "RecDesc";
CreateDir(szTemp);
szTemp = szAppPath ^ "Servers";
CreateDir(szTemp);
Disable(STATUS);
end;
//------------------------------------------------------------------------------------------------
function _PerformSet ( sFileset)
NUMBER nDisk;
BOOL bDone;
NUMBER nRet, ntDisk, nHandle;
BOOL bRightDisk;
STRING szTemp [_MAX_LENGTH];
STRING szTmp [_MAX_LENGTH];
STRING szFileName [_MAX_LENGTH];
STRING szExt [_MAX_LENGTH];
STRING szText [_MAX_LENGTH];
STRING szEntDisk [_MAX_LENGTH];
STRING szMsg [_MAX_LENGTH];
begin
bDone = FALSE;
nDisk = 1;
while ( !bDone )
nRet = FileSetPerformEz ( sFileset, 1);
switch ( nRet )
case FS_TONEXTDISK:
// non usato da FileSetPerformEz
if nDisk > 0 then
NumToStr( szExt, nDisk );
szEntDisk = STR_INSERTDISK + STR_TAGDISK1 + szExt;
szTemp = "diskid" ^ szExt;
SetDialogTitle ( DLG_ENTER_DISK, "Cambio disco" );
SetDialogTitle ( DLG_CANCEL, "Uscita" );
Suppress( ENTERDISK_ERRMSG, DISABLE );
bRightDisk = FALSE;
while( !bRightDisk )
nRet = EnterDisk( szEntDisk, szTemp );
switch( nRet )
case DISKID:
_Attenzione( "L'unita' indicata non e' valida." );
case BADPATH:
_Attenzione( "Il percorso indicato non e' valido." );
case DRIVEOPEN:
_Attenzione( "Inserire il disco nell'unita' indicata!" );
case BADTAGFILE:
_Attenzione( "Il disco inserito non e' corretto. Inserire il disco richiesto." );
case CANCEL:
_ExitOnConfirm( );
case OK:
bRightDisk = TRUE;
endswitch;
endwhile;
endif;
case FS_OPERROR:
Sprintf( szMsg, "E' stato rilevato un errore copiando il file %s. Il file non e' stato copiato.\n\nErrore FS_OPERROR.", ERRORFILENAME );
_Errore( szMsg );
case FS_GENERROR:
Sprintf( szMsg, "E' stato rilevato un errore copiando il file %s. Il file non e' stato copiato.\n\nErrore FS_GENERROR.", ERRORFILENAME );
_Errore( szMsg );
case FS_TARGETREADONLY:
szMsg="Impossibile scrivere nella directory di destinazione.";
_Errore( szMsg );
case FS_INCORRECTDISK:
_Attenzione( "Disco non valido.\n\nInserire il disco corretto." );
case FS_DISKONEREQUIRED:
szEntDisk = STR_INSERTDISK + STR_TAGDISK1;
_Attenzione( szEntDisk );
case FS_RESETREQUIRED:
_Errore( "Impossibile copiare il file a causa di un errore interno." );
case FS_OUTOFSPACE:
szMsg= "Lo spazio su disco non e' stato sufficiente per completare la copia dei files.\n\nErrore FS_OUTOFSPACE.";
_Errore( szMsg );
case FS_DONE:
bDone = TRUE;
default :
if ( nRet < 0 ) then
szMsg = "Si e' verificato un errore copiando e decomprimendo il file " ^ ERRORFILENAME;
_Errore( szMsg );
endif;
endswitch;
endwhile;
FileSetEndPerform ( sFileset);
end;
//_______________________________________________________________________________________________________________________
// *** aggiorna il menu dei programmi di windows, aggiungendovi la directory del programma ed il link a ba0.exe
function _UpdateStartMenu( )
STRING szItemName [_MAX_LENGTH],
szFolder [_MAX_LENGTH],
szCmdLine [_MAX_LENGTH],
szIconPath [_MAX_LENGTH],
szWorkingDir[_MAX_LENGTH];
begin
Enable( HOURGLASS );
// Mostra Program Manager
AppCommand( PROGMAN, CMD_RESTORE );
// Aggiunge il gruppo di programmi ed i programmi
szFolder="Campo";
ShowGroup (szFolder , SW_NORMAL );
if ( TRUE) then
// Aggiunge i link Program Manager
if bInstallDemo then
szItemName = "Campo Demo";
else
szItemName = "Campo";
endif;
szCmdLine = szAppPath ^ "\\BA0.EXE";
szIconPath = szCmdLine;
AddFolderIcon( szFolder, szItemName, szCmdLine, "", szIconPath, 0, "", REPLACE );
//AddProgItemEx ( szFolder, szItemName, szCmdLine, "", szIconPath, 0, "", REPLACE );
endif;
AppCommand( PROGMAN, CMD_MINIMIZE );
Disable( HOURGLASS );
end;
//-----------------------------------------------------------------------------
function _CambiaDirectory( )
STRING szText[ _MAX_LENGTH ];
STRING szModifiedPath[ _MAX_LENGTH ];
STRING szUserSelectedDrive[ _MAX_LENGTH ];
STRING szIncorrectPath[ _MAX_LENGTH ];
begin
szText = STR_TEXT1;
SetDialogTitle( DLG_ASK_PATH, "Directory per installare i programmi" );
if ( AskPath( szText , szAppPath, szModifiedPath ) = OK ) then
StrToUpper( szModifiedPath, szModifiedPath );
GetDisk( szModifiedPath, szUserSelectedDrive );
if ( Is ( VALID_PATH, szModifiedPath ) = 1 ) then
if szAppPath != szModifiedPath then
szAppPath = szModifiedPath;
szDataPath = szAppPath ^ "DATI\\";
endif;
szText = STR_DATATEXT1;
SetDialogTitle( DLG_ASK_PATH, "Directory per installare i dati" );
if ( AskPath( szText , szDataPath, szModifiedPath ) = OK ) then
StrToUpper( szModifiedPath, szModifiedPath );
GetDisk( szModifiedPath, szUserSelectedDrive );
if ( Is ( VALID_PATH, szModifiedPath ) = 1 ) then
szDataPath = szModifiedPath;
else
szIncorrectPath = STR_INVALID_PATH + "\n" + szModifiedPath;
_Attenzione( szIncorrectPath );
endif;
endif;
endif;
endif;
end;
//________________________________________________________________________________________________________________________
// *** copia il file ADMIN.INI nella directory config che sta sotto la directory dati
function _CopiaADMININI( )
STRING szPath[_MAX_LENGTH], szFileName[_MAX_LENGTH], szLine[ _MAX_LENGTH], szFC[ 2 ], szTmp[ _MAX_LENGTH];
NUMBER nFlag, nFileIn, nFileOut, nLoop;
begin
szPath = szDataPath ^ "CONFIG";
szTmp = szPath ^ "ADMIN.INI";
if ( ! Is( FILE_EXISTS, szTmp ) ) then
if ExistsDir( szPath ) = NOTEXISTS then
if ( CreateDir( szPath ) < 0 ) then
_Errore( "Impossibile creare la directory CONFIG sotto i dati!" );
endif;
endif;
szFileName = "ADMIN.INI";
OpenFileMode( FILE_MODE_APPEND );
CreateFile( nFileOut, szPath, szFileName );
OpenFileMode( FILE_MODE_NORMAL );
szPath = szAppPath;
OpenFile( nFileIn, szPath, szFileName );
nFlag = GetLine( nFileIn, szLine );
while( nFlag = 0 )
if szLine = "[Colors]" then
nLoop = 0;
while( nLoop = 0 )
WriteLine( nFileOut, szLine );
nFlag = GetLine( nFileIn, szLine );
nLoop = nFlag;
if ( nLoop = 0 ) then
StrSub( szFC, szLine, 0, 1 );
if ( szFC != "[" ) then
nFlag = GetLine( nFileIn, szLine );
else
nLoop = 1;
endif;
endif;
endwhile;
else
if szLine = "[Font]" then
nLoop = 0;
while( nLoop = 0 )
WriteLine( nFileOut, szLine );
nFlag = GetLine( nFileIn, szLine );
nLoop = nFlag;
if ( nLoop = 0 ) then
StrSub( szFC, szLine, 0, 1 );
if ( szFC != "[" ) then
nFlag = GetLine( nFileIn, szLine );
else
nLoop = 1;
endif;
endif;
endwhile;
else
nFlag = GetLine( nFileIn, szLine );
endif;
endif;
endwhile;
CloseFile( nFileIn );
CloseFile( nFileOut );
endif;
end;
//________________________________________________________________________________________________________________________
// *** copia il file "install.ini"
function _CopiaINSTALLINI( )
STRING szPath[_MAX_LENGTH], szFileName[_MAX_LENGTH], szLine[ _MAX_LENGTH], szFC[ 2 ], szTmp[ _MAX_LENGTH];
STRING szSrcPath[_MAX_LENGTH];
NUMBER nFlag, nFileOut, nLoop;
begin
// corregge il path dei dati in base all'installazione da dischetto o CD (o installazione di rete)
szSrcPath = SRCDIR ;
ParsePath(szPath,szSrcPath,DIRECTORY);
//controlla la lunghezza della stringa del path (szPath): se >= 7 ->installazione da CD o rete
//con immagini dei dischetti su DISK1, DISK2 ,...; se su CD/rete ->trimma la stringa del path in
//modo che resti solo \DISK1
if (StrLength(szPath) >= 7) then
StrSub(szTmp , szPath, (StrLength(szPath) - 7) ,6 );
nFileOut=StrFind(szTmp, "DISK");
if nFileOut>=0 then
StrSub(szPath, szSrcPath ,0, StrLength(szSrcPath)- 7 + nFileOut);
szSrcPath = szPath;
endif;
endif;
//dopo aver completato la scrittura del path dei sorgenti di installazione (szSrcPath) gli aggiunge
//la directory dei files compressi (zip se installazione normale, zipdemo se demo)
if bInstallDemo then
szSrcPath= szSrcPath ^ ZIPDEMO_DIRECTORY;
else
szSrcPath= szSrcPath ^ ZIP_DIRECTORY;
endif;
//quindi crea il nome completo di path dell'install.ini che si trova nella directory dei files compressi
//che si vogliono scompattare..
szFileName = szSrcPath ^ "INSTALL.INI";
//..e trasforma szPath in .\install.ini (attualmente szAppPath <20> ignota)
szPath= szAppPath ^ "INSTALL.INI";
//scrive delle "profile strings" nell'install.ini
//scrive nel paragrafo [Main] il "DiskPath"=szSrcPath, il Producer, il DiskSize, la Versione
//ACHTUNG! questo <20> l'install.ini che finisce nel root, con Versione=0; infatti szPath vale .\install.ini
WriteProfString(szPath,"Main","DiskPath",szSrcPath);
GetProfString(szFileName,"Main","Producer",szTmp);
WriteProfString(szPath,"Main","Producer",szTmp);
if bInstallDemo then
szTmp = "X";
else
szTmp = " ";
endif;
szPath=szAppPath ^ "install.ini";
if WriteProfString(szPath,"Main","Demo",szTmp) < 0 then
_Attenzione("Impossibile scrivere il tipo della versione su install.ini");
endif;
end;
//________________________________________________________________________________________________________________________
// *** Crea un lista delle precedenti installazioni memorizzate nel file Campo.stp e genera
//una option box con la lista,per lasciare scegliere all'utente quale installazione aggiornare
function _ChooseReinstall(nRetv)
LIST list_msg;
NUMBER nPar,nBracket,i;
STRING szInst,szIni,szPar,szComponents, szTestPrg, szTestDb, szWarning;
BOOL bCheck;
begin
list_msg = ListCreate(STRINGLIST);
szPar = "1";
nPar = 1;
szWarning = " (ATTENZIONE !! Aggiornare prima il server !)";
//lettura del file campo.stp e creazione della lista delle installazioni in teoria presenti..
//..in teoria perche' potrebbero anche essere non piu' valide o rimosse!
while (GetProfString("C:\\Campo.stp", szPar, "Program", szInst) = 0)
if (GetProfString("C:\\Campo.stp", szPar, "CampoIni", szIni) = 0) then
i = StrFind(szIni,"\\campo.ini");
StrSub(szInst, szIni, 0, i);
if (!Is( FILE_EXISTS, szIni)) then
szInst = szInst ^ " (RIMOSSA)";
else
GetProfString(szIni, "Main", "TestPrograms", szTestPrg);
if (szTestPrg = "X" || szTestPrg = "Y") then
szInst = szInst + szWarning;
endif;
endif;
else
if (!Is( FILE_EXISTS, szInst ^ "\\campo.aut")) then
szInst = szInst ^ " (RIMOSSA)";
else
szIni = szInst ^ "\\campo.ini";
GetProfString(szIni, "Main", "TestPrograms", szTestPrg);
if (szTestPrg = "X" || szTestPrg = "Y") then
szInst = szInst + szWarning;
endif;
endif;
endif;
ListAddString(list_msg, szInst, AFTER);
nPar = nPar + 1;
NumToStr(szPar, nPar);
endwhile;
szComponents = "Installazioni precedenti";
//crea la lista delle installazioni precedenti
i = ListGetFirstString(list_msg,szInst);
while (i = 0)
//precheck di una installazione tipo server se esiste;senno' no precheck e segnalazione di ..
//..aggiornare prima il server
if (StrFind(szInst, "(") < 0) then
szIni = szInst + "\\campo.ini";
GetProfString(szIni, "Main", "TestDatabase", szTestDb);
GetProfString(szIni, "Main", "TestPrograms", szTestPrg);
bCheck = (szTestDb = "X" || szTestDb = "Y") && (szTestPrg = "N" || szTestPrg = "");
ComponentAddItem(szComponents, szInst, 0, bCheck);
else
ComponentAddItem(szComponents, szInst, 0, FALSE);
endif;
i = ListGetNextString(list_msg,szInst);
endwhile;
nRetv = SdAskOptions("Installazioni precedenti", "Selezionare l'installazione da aggiornare", "",
"", szComponents, EXCLUSIVE);
nReinstall = 0;
if (nRetv = NEXT) then
nPar = 1;
i = ListGetFirstString(list_msg,szInst);
while (i = 0)
if (ComponentIsItemSelected(szComponents, szInst)) then
if (StrFind(szInst, "(RIMOSSA)") < 0) then
nBracket = StrFind(szInst, " (");
if (nBracket > 0) then
MessageBox("ATTENZIONE, si e' scelto di aggiornare da CD una installazione di tipo client di rete.\nProseguire solo nel caso l'aggiornamento automatico del client sia precedentemente fallito !",WARNING);
StrSub(szInst,szInst,0,nBracket);
endif;
szReinstallPath = szInst;
nReinstall = nPar;
endif;
endif;
nPar = nPar+1;
i = ListGetNextString(list_msg,szInst);
endwhile;
endif;
end;
//________________________________________________________________________________________________________________________
// *** crea una lista con le unita' disco del computer, scegliendo poi quelle di rete (remote_drive)
function _IsNetworkDrive(szPath, bRetval)
STRING szDisk;
NUMBER list, nCheck;
begin
bRetval = FALSE;
if (GetDisk(szPath, szTmp) < 0) then
return;
endif;
StrSub(szDisk,szTmp,0,1);
list = ListCreate(STRINGLIST);
if (GetValidDrivesList(list, REMOTE_DRIVE, -1) < 0) then
ListDestroy(list);
return;
endif;
nCheck = ListGetFirstString(list, szTmp);
while (nCheck = 0 && ! bRetval)
if (szTmp = szDisk) then
bRetval = TRUE;
endif;
nCheck = ListGetNextString(list, szTmp);
endwhile;
ListDestroy(list);
end;
//________________________________________________________________________________________________________________________
// *** inizializza l'installazione
function _ProgramPrologue()
begin
_GetOSName( ); // Reperisce il nome del sistema operativo in szOSName
SetDialogTitle (DLG_ASK_OPTIONS, "Seleziona i componenti");
SetDialogTitle (DLG_ASK_TEXT, "");
SetDialogTitle (DLG_ASK_YESNO, "Domanda");
SetDialogTitle (DLG_ENTER_DISK, "Setup ha bisogno del prossimo disco");
SetDialogTitle (DLG_MSG_INFORMATION, "Messaggio");
SetDialogTitle (DLG_MSG_SEVERE, "Errore fatale");
SetDialogTitle (DLG_MSG_WARNING, "Attenzione");
SetDialogTitle( DLG_ASK_PATH, "Scelta direttorio" );
_DisattivaScreenSaver( ); // Disabilita lo screen-saver
end;
//________________________________________________________________________________________________________________________
// *** termina l'installazione
function _ProgramEpilogue()
begin
_FineInstallazione( );
_RiattivaScreenSaver( );
end;