Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it L'avatar di poyel
    Registrato dal
    Oct 2010
    Messaggi
    51

    [DELPHI] servizio windows con applicazione

    Ciao Ragazzi, dovrei realizzare un'applicazione che abbia un servizio che gira in background e poi un'interfaccia che lanci manualmente delle operazioni che possono anche essere svolte in automatico dal servizio. Spiego meglio:
    Devo realizzare un'applicazione che effettui il backup automatico di un database firebird. Voglio creare un servizio che rimane sempre attivo che controlla i parametri salvati dall'interfaccia (quando eseguire il backup automatico, i percorsi relativi al salvataggio del backup e quelli dei file da backuppare, varie password ecc..), ed eseguire il backup alla data segnata (vorrei evitare le operazioni pianificate di windows). Dall'interfaccia devo però dare la possibilità di lanciare il backup in maniera manuale. Ho in sostanza due cose che fanno le medesime operazioni con la differenza che uno è manuale e l'altro automatico. Avete qualche consiglio da darmi sperando di essere stato chiaro

    Grazie
    Ps. Vorrei creare qualcosa tipo il cobian backup, o almeno qualcosa che gli si avvicini
    Il programmatore è colui che converte
    la caffeina in codice.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    http://delphi.about.com/od/windowssh...plications.htm

    per quanto riguarda invece a quello che vuoi fare, posso dirti come faccio io.

    ho scritto un programmello che esegue una serie di operazioni, tra cui la compilazione di batch, che vengono eseguiti.
    [img][/img]

    mi appoggio a programmini già fatti e autocostruiti per "decimare" i backup e spedire per email i risultati

    in sostanza viene compilato un file batch "prima", viene fatto "qualcosa", viene eseguito un batch "dopo"
    questo è un esempio
    codice:
    echo ------------------------------>>$log
    echo. >>$log
    echo. >>$log
    
    mkdir $backuproot\compressi
    date /t >>$log
    time /t >>$log
    $path\robocopy $path $backuproot\dati /mir /r:1 /w:1 /nfl /ndl /log+:$log
    $path\robocopy $root $backuproot\root /mir /r:1 /w:1 /nfl /ndl /log+:$log
    $path\7z -m0=lzma2  a $backuproot\compressi\backup_dati_$date.7z $path1\$file1 $path2\$file2 $path3\$file3 $path4\$file4 $path5\$file5 $path6\$file6
    $path\7z t $backuproot\compressi\backup_dati_$date.7z >>$log
    
    $path\decima $quanti $path1\*.sql >>$log
    $path\decima $quanti $path2\*.jdz >>$log
    $path\decima $quanti $path3\*.jdb >>$log
    $path\decima $quanti $path4\*.jdz >>$log
    $path\decima $quanti $path5\*.jdb >>$log
    $path\decima $quanti $path6\*.jdz >>$log
    $path\decima $quanti $backuproot\compressi\*.7z >>$log
    
    copy $path3\$file3 $readonly /y
    echo ------------------------------>>$log
    echo. >>$log
    echo. >>$log
    
    dir $path1 /s /od >>$log
    dir $path2 /s /od >>$log
    dir $path3 /s /od >>$log
    dir $path4 /s /od >>$log
    dir $path5 /s /od >>$log
    dir $path6 /s /od >>$log
    echo ------------------------------>>$log
    echo. >>$log
    echo. >>$log
    dir $path\$readonly >>$log
    dir $backuproot\compressi /s /od >> $log
    
    $path\blat $log -to $email -subject "Risultato Backup-$nomecomputer" -server smtp.email.it -f xxx@email.it -u xxx@email.it -pw xxx

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da franzauker
    http://delphi.about.com/od/windowssh...plications.htm

    per quanto riguarda invece a quello che vuoi fare, posso dirti come faccio io.

    ho scritto un programmello che esegue una serie di operazioni, tra cui la compilazione di batch, che vengono eseguiti.


    mi appoggio a programmini già fatti e autocostruiti per "decimare" i backup e spedire per email i risultati

    in sostanza viene compilato un file batch "prima", viene fatto "qualcosa", viene eseguito un batch "dopo"
    questo è un esempio
    codice:
    echo ------------------------------>>$log
    echo. >>$log
    echo. >>$log
    
    mkdir $backuproot\compressi
    date /t >>$log
    time /t >>$log
    $path\robocopy $path $backuproot\dati /mir /r:1 /w:1 /nfl /ndl /log+:$log
    $path\robocopy $root $backuproot\root /mir /r:1 /w:1 /nfl /ndl /log+:$log
    $path\7z -m0=lzma2  a $backuproot\compressi\backup_dati_$date.7z $path1\$file1 $path2\$file2 $path3\$file3 $path4\$file4 $path5\$file5 $path6\$file6
    $path\7z t $backuproot\compressi\backup_dati_$date.7z >>$log
    
    $path\decima $quanti $path1\*.sql >>$log
    $path\decima $quanti $path2\*.jdz >>$log
    $path\decima $quanti $path3\*.jdb >>$log
    $path\decima $quanti $path4\*.jdz >>$log
    $path\decima $quanti $path5\*.jdb >>$log
    $path\decima $quanti $path6\*.jdz >>$log
    $path\decima $quanti $backuproot\compressi\*.7z >>$log
    
    copy $path3\$file3 $readonly /y
    echo ------------------------------>>$log
    echo. >>$log
    echo. >>$log
    
    dir $path1 /s /od >>$log
    dir $path2 /s /od >>$log
    dir $path3 /s /od >>$log
    dir $path4 /s /od >>$log
    dir $path5 /s /od >>$log
    dir $path6 /s /od >>$log
    echo ------------------------------>>$log
    echo. >>$log
    echo. >>$log
    dir $path\$readonly >>$log
    dir $backuproot\compressi /s /od >> $log
    
    $path\blat $log -to $email -subject "Risultato Backup-$nomecomputer" -server smtp.email.it -f xxx@email.it -u xxx@email.it -pw xxx

  4. #4
    Utente di HTML.it L'avatar di poyel
    Registrato dal
    Oct 2010
    Messaggi
    51
    Ciao da quanto ho potuto intuire quello che fai con il tuo programma è la stessa cosa che devo fare io. L'articolo che mi hai suggerito l'avevo già letto, infatti mi interessava sapere qualcosa in più su come organizzare il progetto cioè, io immaginavo il programma che fosse strutturato in questo modo:
    Al primo avvio si apre la gui, si impostano tutti i parametri, e si installa il servizio che controlla la data e l'ora così quando il servizio verifica che sono quelli impostati avvia il backup. Mi interessava sapere se era meglio affidare al servizio tutte le operazioni di backup, se realizzare un tool esterno che effettuasse il backup e avere quindi una gui per le impostazioni, un servizio e un tool per il backup. Secondo voi quale strategia conviene di più?
    Il programmatore è colui che converte
    la caffeina in codice.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da poyel
    Al primo avvio si apre la gui, si impostano tutti i parametri, e si installa il servizio che controlla la data e l'ora così quando il servizio verifica che sono quelli impostati avvia il backup. Mi interessava sapere se era meglio affidare al servizio tutte le operazioni di backup, se realizzare un tool esterno che effettuasse il backup e avere quindi una gui per le impostazioni, un servizio e un tool per il backup. Secondo voi quale strategia conviene di più?
    Un tool esterno per effettuare il backup, se occorre, lo fornisce già Firebird: è gbak.

    Lancialo per verificare quali sono i parametri da specificare per utilizzarlo.

    Per quanto riguarda le restanti applicazioni, realizza un servizio Windows che, rimanendo in memoria, verifichi le impostazioni configurate e lanci al momento opportuno "gbak" o - ancora meglio - si colleghi ai servizi del FireBird server per eseguire le operazioni di backup e restore, a prescindere dal tool "gbak".

    Per la configurazione, crea invece una VCL Forms Application per definire visualmente e scrivere le impostazioni che devono essere utilizzate dal servizio.

    Per interrogare lo stato del servizio, cerca le funzioni API (o componenti già pronti) che accedano all'interfaccia di gestione dei servizi (SCM) di Windows, oppure instaura un colloquio TCP/IP tra le due applicazioni usando i componenti Indy o più in generale tramite socket o "mailslot", in breve con il meccanismo di comunicazione interprocessuale (IPC) che preferisci, a seconda delle esigenze e delle prerogative.

    Le possibilità accessibili per il colloquio tra le applicazioni dipende anche dalla versione di Delphi che possiedi.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it L'avatar di poyel
    Registrato dal
    Oct 2010
    Messaggi
    51
    Il gbak lo conosco già pensavo di utilizzare le librerie interbase per il il backup/restore anche perché devo poi comprimere tutto in un file zip, e penso che gestendo tutto dal programma viene meglio.

    O mi sbaglio e con il gbak viene meglio?

    Quali sono i servizi del firebird server che intendi tu? Ci sono altri servizi che si occupano di backup/restore già integrati nel server?

    Ah dimenticavo uso delphi 2009 con firebird 2.1.

    Grazie
    Il programmatore è colui che converte
    la caffeina in codice.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    personalmente ti sconsiglio di "reinventare la ruota".

    ci sono strumenti che esistono già, e sono affidabili? usali.

    nel caso di backup di database non ha molto senso, a mio parere, usare metodi "applicativi", invece degli strumenti a corredo.

    Ha senso nel caso in cui devi "paciugare" PRIMA i dati (es. storicizzarne alcuni per toglierli dai backup).
    ---
    Nello stesso modo non ha un grandissimo senso usare una libreria per comprimere i dump: ci sono millemila programmi già fatti, robustissimi, e che funzionano benissimo.
    E che, per inciso, usano anche più thread.
    Tra questi non c'è bisogno di citare pbzip2, freearc e 7z (tra quelli utilizzabili, sennò c'è l'inossidabile rar)

    ----
    Parimenti non ha un grandissimo senso (a mio parere) scrivere un servizio per una cosa del genere: fai una banalissima applicazione e buonanotte.
    Per eseguirla... falla lanciare da un servizio (=> cobian) come finto task.
    Fine degli sbattimenti, tempo massimo massimo 5 minuti, rischio errori praticamente zero.
    ----
    L'elemento invece fondamentale è il reporting, ossia inventati un meccanismo che ti invii per posta elettronica il risultato dei backup verificati.

    Qui entrano in gioco eventuali "paranoie" varie.
    ----
    Per i file la cosa migliore (almeno per me) è quello di calcolare tutti gli hash dei file, compattare tutte le cartelle e sottocartelle in un singolo archivio, "salvarlo" da qualche parte (NAS etc), estrarre tutto il contenuto in cartella temporanea.
    Verificare tutti gli hash della cartella temporanea.
    Inviare per e-mail il risultato del confronto
    ----
    Per i db la cosa è più complessa, anche qui dipende dal livello di "paranoicità".
    Puoi fare il restore (in un db diverso) di tutto quanto, poi contare le righe di tutte le tabelle (originali e restorate) e farti spedire il risultato.
    Se sei paranoico all'inverosimile (tipo me) puoi anche usare funzioni aggregate (somma tutti gli imponibili di tutte le righe del magazzino, del db originale e del restore, e verifica che siano uguali...)

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da poyel
    Il gbak lo conosco già pensavo di utilizzare le librerie interbase per il il backup/restore anche perché devo poi comprimere tutto in un file zip, e penso che gestendo tutto dal programma viene meglio.
    Se ti riferisci ai componenti InterBase Express presenti in Delphi, non è garantita la compatibilità piena con FireBird, anche perché i due database - pur avendo radici comuni - si stanno via via sempre più differenziando nelle caratteristiche e nei protocolli di comunicazione.

    Ricerca quindi componenti di terze parti che supportino correttamente FireBird.

    Per la compressione, hai a disposizione diverse classi già incorporate in Delphi, ma ne puoi trovare tantissimi altri.


    Originariamente inviato da poyel
    O mi sbaglio e con il gbak viene meglio?
    Viene uguale: il risultato dipende dalle opzioni specificate, non dal programma utilizzato.


    Originariamente inviato da poyel
    Quali sono i servizi del firebird server che intendi tu? Ci sono altri servizi che si occupano di backup/restore già integrati nel server?
    Sono quelli di cui parlavi all'inizio del thread, cioè quelli a cui accedi con i componenti di InterBase. L'integrazione del servizio di backup/restore integrato nel server si riferisce al fatto che il server supporta questa funzionalità che offre, come servizio, a programmi che ne fanno richiesta via socket, come avviene con "gbak".

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Utente di HTML.it L'avatar di poyel
    Registrato dal
    Oct 2010
    Messaggi
    51
    Per rispondere a franzauker una volta un mio professore dell'università mi ha detto "se qualcuno ha fatto qualcosa che funziona bene perché non utilizzarla..." ma si riferiva alle librerie, io devo fare un'applicazione per un gestionale della società per cui lavoro, e deve essere una cosa "proprietaria" nel senso che non deve utilizzare altri programmi per lanciare il mio.

    @alka: a questo punto della discussione sono più indeciso di prima se usare componenti come FIB che si interfacciano benissimo con il firebird, tralasciando le componenti INTERBASE EXPRESS, che però sono a pagamento o se usare il gbak però con tutte le preoccupazioni del caso (quando comincia, se ci sono errori durante il backup, quando finisce, ecc...).
    Il programmatore è colui che converte
    la caffeina in codice.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da alka
    Ricerca quindi componenti di terze parti che supportino correttamente FireBird.
    ZEOS
    Per la compressione, hai a disposizione diverse classi già incorporate in Delphi, ma ne puoi trovare tantissimi altri.
    Tra quelli ti consiglio ZipForge, lo uso da tempo.
    Attenzione alla compatibilità in estrazione con ZIP che NON sempre è garantita usando la criptazione (anche in modo classico).

    C'è anche una vecchia libreria per 7z (ma che non supporta LZMA2, e quindi niente multithread).

    Ti suggerisco, in tutti i casi, di lasciar perdere tentativi di reinventare un software efficiente di compressione (a meno che hai archivi piccolissimi e quindi non ti interessa)
    ---
    Riguardo a firebird... è una vita che non lo uso più, ma credo ci siano delle applicazioni di backup più aggiornate di gbak, ufficialmente disponibili

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.