giUpdate - Una DLL per l'aggiornamento automatico di un programma

giUpdater è una DLL sviluppata in VB.NET (utilizza il Microsoft framework 2.0) che permette di controllare la disponibilità di un eventuale aggiornamento per il nostro software. La libreria consente anche di scaricare la nuova versione.

Il funzionamento di base della dll è molto semplice e può essere riassunto in 4 passi:

  • lettura di uno script remoto;

  • elaborazione dello script;

  • eventuale segnalazione della disponibilità della nuova versione;

  • eventuale download della nuova versione.

 

Per l'utilizzo e l'integrazione di giUpdater con il tuo programma puoi prendere spunto dal seguente progetto (VB.NET) di esempio. L'esempio e la dll possono essere scaricati cliccando sulla seguente icona:

Download giUpdater & progetto di esempio  Scaricato 89 volte

Per la descrizione di metodi, eventi e proprietà della libreria clicca sul seguente link:Documentazione tecnica

Lo script remoto (PHP)

Lo script remoto viene elaborato da giUpdater che eseguirà determinate azioni; per capire meglio vediamo un esempio:

 
<?
//NON MODIFICARE
//////////////////////////////////////////////////////////
header('Content-type: text/plain');
//////////////////////////////////////////////////////////
?>
<?
$last_version= "1.1.0.1";	//es: 1.0.0.0
$script_version="1.0.0.0";			//versione di questo file
$length_byte=1024; //dimensione in byte del pacchetto di installazione
$priority=3; //priorità dell'aggiornamento
$dir_setup= "http://localhost/test_updater/";
$tmp=str_replace(".","_",$last_version);
$filename_setup=$dir_setup . "NOME_SOFTWARE" . $tmp . ".exe";
echo "La tua versione:" . $_GET['localversion'] . "\n";
echo "[START]\n"; //inizio script
echo "script_version=" . $script_version ."\n"; //ultima versione disponibile
echo "last_version=" . $last_version ."\n"; //ultima versione disponibile
echo "length_byte=" . $length_byte ."\n"; //ultima versione disponibile
echo "priority=" . $priority ."\n"; //priorità dell'aggiornamento
echo "dir_setup=" . $dir_setup ."\n"; //cartella in cui risiede il nuovo pacchetto di installazione
echo "filename_setup=" . $filename_setup ."\n"; //nome del file del pacchetto di installazione
echo "[END]\n"; //fine script
?>

Lo script vero e proprio è compreso tra le stringhe [START] e [END]; prima e/o dopo questi tag possono essere aggiunte altre istruzioni php (per esempio può essere richiamata una funzione per la creazione di statistiche e quindi la stima di utilizzo del nostro software).

Personalizzazione dello script

La personalizzazione dello script è possibile modificando le seguenti righe:

 
<?
$last_version= "1.1.0.1"; //es: 1.0.0.0 identifica l'ultima versione disponibile del software da aggiornare.
$script_version="1.0.0.0"; //versione di questo file
$length_byte=1024; //dimensione in byte del pacchetto di installazione
$priority=3; //priorit&agrave; dell'aggiornamento
$dir_setup= "http://localhost/test_updater/";	//identifica la directory che contiene la nuova versione.
$filename_setup=$dir_setup . "NOME_SOFTWARE" . $tmp . ".exe";
?>

La variabile $filename conterrà quindi il percorso completo del pacchetto di aggiornamento che si desidera scaricare. Nell'esempio, $filename=”http://localhost/test_updater/NOME_SOFTWARE1_1_0_1.exe”

Test della libreria

Ecco un semplice esempio di come utilizzare la libreria:

  • Creare un nuovo progetto;
  • Aggiungere il riferimento alla dll;
  • Inserire un tasto (settare la proprietà name a Button1 ) e una progress bar (settare la proprietà name a ProgressBar1);
  • Inserire il seguente codice:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
         Dim nomeFileLocale As String = Application.StartupPath
         Dim giUP As New giUpdater.Updater("http://www.myvirtualglab.org/serpanalyzer/servizio/update/update.php", My.Application.Info.Version)
         AddHandler giUP.SendMessage, AddressOf SendMessageHandler
         AddHandler giUP.Update, AddressOf AggiornaHandler
         AddHandler giUP.UpdateProgress, AddressOf Progress
         AddHandler giUP.DownloadCompleted, AddressOf DownloadCompleted
         giUP.run()
         Dim i As Integer
         For i = 0 To giUP.ErrorList.Count - 1
             'MsgBox(giUP.ErrorList(i).Message)
         Next
         MsgBox("Last version=" &amp; giUP.LastVersion.ToString &amp; vbCrLf &amp; "Local version=" &amp; My.Application.Info.Version.ToString &amp; vbCrLf &amp; "Devo aggiornare= " &amp; giUP.IsTimeToUpdate &amp; vbCrLf &amp; "Priorit&agrave;= " &amp; giUP.Priority)
         MsgBox("Il file verr&agrave; salvato in " &amp; nomeFileLocale)
         giUP.DownloadNewVersion(nomeFileLocale)
         'MsgBox("Build=" &amp; My.Application.Info.Version.Build)
         'MsgBox("Revision=" &amp; My.Application.Info.Version.Revision)
         'MsgBox("Script version=" &amp; giUP.scriptVersion.ToString)
         'MsgBox("Dimensione setup=" &amp; giUP.DimensionSetup.ToString)
         'MsgBox("Dll version=" &amp; giUP.VersionDLL.ToString)
     Catch ex As Exception
         MsgBox(ex.Message)
     End Try
 End Sub
 
 Private Sub SendMessageHandler(ByVal sender As System.Object, ByVal e As SendMessageEventArgs)
     'MessageBox.Show(e.Message)
 End Sub
 
 Private Sub AggiornaHandler(ByVal sender As System.Object, ByVal e As UpdateEventArgs)
     MessageBox.Show("Devo aggiornare;" &amp; e.Priority)
 End Sub
 
 Private Sub Progress(ByVal sender As System.Object, ByVal e As DownloadProgressChangedEventArgs)
     Me.Text = e.ProgressPercentage &amp; "%"
 End Sub
 
 Private Sub DownloadCompleted(ByVal sender As System.Object)
     Me.Text = "Download completato"
     MessageBox.Show("Download completato!")
 End Sub