Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - VBnet Splash Screen/Autoupdate
Forum - C# / VB.NET - VBnet Splash Screen/Autoupdate

Avatar
tatino (Normal User)
Rookie


Messaggi: 27
Iscritto: 10/09/2013

Segnala al moderatore
Postato alle 17:34
Mercoledì, 09/10/2013
Buonasera ragazzuoli belli!
Dunque, vi espongo cosa ho in mente e se secondo voi è la scelta più corretta.

Ho sviluppato un'applicazione distribuita ed utilizzata da un bel pò di utenti di una community.
Il mio applicativo deve essere sempre aggiornabile automaticamente in base a cio' che propongono gli organizzatori.

Nell'attuale versione quando si apre l'applicazione il sistema controlla tramite un file txt posizionato sul server se la versione è quella corrente ed eventualmente scarica un file zip, avvio un applicativo di tipo console che estrae i file dentro zip, chiude l'applicativo, elimina i vecchi file ed aggiorna quelli nuovi e riavvia l'exe.
Fin qui tutto bene se non fosse che adesso il file zip comincia a pesare e poi ci siamo accorti che alcuni antivirus eliminano il file EXE dentro lo zip. :grr:

Avevo pensato di realizzare un exe principale e poi tutti i vari form contenuti dentro una libreria di classi che dovrebbe essere scaricata automaticamente ad ogni apertura dell'exe (cosi ad ogni avvio ci sarebbe l'ultima dll rilasciata) ma ovviamente il file è referenziato sin dall'apertura e quindi non me lo farebbe sostituire perchè in uso.

Dunque alla fine della fiera devo optare per un avvio di tipo consolle che scarica la dll ed avvia l'exe finale oppure utilizzando uno splash screen (mi sembra di aver capito che non referenza subito le dll ma solo a partire dal form principale) risolvo?

Intanto vi chiedo se è giusta l'osservazione sullo splash screen o no.

consigliatemi :k:

Grazie.

Salvo g.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 18:29
Mercoledì, 09/10/2013
Beh io farei così:
Creerei un database sqlite, lo riempirei di tabelle, una per versione, e una con lo storico delle versioni. Per ogni tabella con una versione si elencano i file necessari e dove andarli a trovare, e i loro hash (md5 o sha). Il database lo carichi nel sito. Il programma va modificato in modo tale che a lanciarlo sia lo stesso updater, che appena avviato scarica il database e controlla la versione del programma installato, se non è uguale all' ultima si aggiorna (hai tutti i dati necessari a tale scopo nel db) altrimenti controllo l' hash di ogni file, e se non sono coincidenti riscarichi il file. In questo modo il programma tenta di aggiornarsi ogni volta che viene avviato, non hai problemi di programma già avviato al momento dell' update, puoi contrastare la modifica illegale dei files ed anche bloccare il programma nel caso in cui il database non sia raggiungibile, quindi internet spento. Come ti sembra come soluzione?

PM Quote
Avatar
tatino (Normal User)
Rookie


Messaggi: 27
Iscritto: 10/09/2013

Segnala al moderatore
Postato alle 20:11
Mercoledì, 09/10/2013
Ciao Dark!
La tua idea mi stuzzica specialmente per quanto riguarda l'hash a cui non avevo pensato.
In realtà l'attuale versione utilizza piu' o meno il tuo ragionamento ma con un file txt ed un file zip che faccio scompattare autonomamente all'applicativo ad ogni aggiornamento.
Poi si avvia il processo esterno che chiude l'attuale versione elimina i file copia quelli nuovi e riavvia il tutto.

Sia la mia idea che la tua prevedono comunque l'utilizzo di un eseguibile che esegue il check a priori e poi avvi l'applicazione finale.

Volevo sapere se esiste un metodo per evitare tale operazione.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 21:55
Mercoledì, 09/10/2013
Credo che, in quanto le dll sono caricate in memoria quelle le possa sostituire durante l' esecuzione del programma. Tu prova a creare una app che utilizza una dll, poi ricompila la dll e cambia qualcosa, prova a copiarla a programma avviato, chiudi il programma e fai ripartire. Se tutto va a buon fine invece che avere due programmi tieni l' updater che avrà la doppia funzione. L' alternativa è avviare il programma, avviare gli aggiornamenti, scaricarli, uccidere il programma e far fare il lavoro ad un altro programma

PM Quote
Avatar
tatino (Normal User)
Rookie


Messaggi: 27
Iscritto: 10/09/2013

Segnala al moderatore
Postato alle 10:24
Giovedì, 10/10/2013
Ciao Dark.
Dunque, ho risolto il problema.

Facendo delle prove ho notato che finchè non utilizzi effettivamente la DLL puoi crearla e sovrascriverla in qualsiasi momento.
Appena viene richiamata con la funzione imports DLL (esempio apertura form) da quel momento in poi non puo' più essere modificata se non a chiusura dell'applicativo.

Quindi creando un semplice form che scarica la DLL ad ogni avvio ci sara' sempre l'ultima versione rilasciata.

Mi è piaciuta moltissimo la tua l'idea dell'hash md5 che integrero' sicuramente.

Salvo G.

PM Quote