- appena viene eseguito, controlla sul server (tramite un percorso di rete windows) se la versione dell'applicazione HelloWorld presente in locale sia meno recente di quella sul server. Se così è, scarica la versione più recente dal percorso (è possibile specificare dalla configurazione se aggiornare una intera cartella o solo l'eseguibile).
- una volta finito il primo punto, esegue l'applicazione HelloWorld che si è copiato in locale.
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { try { FileInfo fi1 = new FileInfo(Properties.Settings.Default.eseguibileRemoto); FileInfo fi2 = new FileInfo(Properties.Settings.Default.eseguibileLocale); //Se la directory locale non esiste, la creo if (!(Directory.Exists(Properties.Settings.Default.cartellaLocale))) { Directory.CreateDirectory(Properties.Settings.Default.cartellaLocale); } //Controllo che il timestamp di modifica del file eseguibile remoto sia //più recente di quello locale if (fi1.LastWriteTime.Ticks > fi2.LastWriteTime.Ticks) { if (Properties.Settings.Default.copiaTutto) { //Devo copiare tutto il contenuto della directory in locale foreach (string fileTrovato in Directory.GetFiles(Properties.Settings.Default.cartellaRemota)) { FileInfo FTEMP = new FileInfo(fileTrovato); //Copio il file remoto in locale File.Copy(fileTrovato, Properties.Settings.Default.cartellaLocale + FTEMP.Name, true); } } else { //Procedura per la copia solo di alcuni files (ad esempio, eseguibili Visual Fox) foreach (string nomeFile in Properties.Settings.Default.copiaSoloQuestiFiles) { FileInfo FTEMP = new FileInfo(nomeFile); File.Copy(Properties.Settings.Default.cartellaRemota + nomeFile, Properties.Settings.Default.cartellaLocale + nomeFile, true); } } } } catch (Exception ex) { } }Appena terminato il lavoro (RunWorkerCompleted), l'applicazione verrà eseguita e il loader verrà terminato:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { //Al termine della copia, mi preparo ad eseguire il programma ProcessStartInfo p = new ProcessStartInfo(); p.FileName = Properties.Settings.Default.eseguibileLocale; p.Arguments = Properties.Settings.Default.parametri; //Se è impostato "eseguiDa" (ad esempio per JT) eseguo il programma dal percorso impostato if (Properties.Settings.Default.eseguiDa.Length > 0) p.WorkingDirectory = Properties.Settings.Default.eseguiDa; //Altrimenti uso la cartella locale else p.WorkingDirectory = Properties.Settings.Default.cartellaLocale; try { //Eseguo il programma Process.Start(p); } catch (Exception exep) { MessageBox.Show("Impossibile avviare il programma richiesto\r\n" + exep.Message); } Application.Exit(); }Le impostazioni possibili nella configurazione del loader sono le seguenti:
Il codice sorgente può essere liberamente scaricabile da Github (qui il link del progetto sul mio sito personale)
Nessun commento:
Posta un commento