Salve a tutti.
Ho realizzato un applicativo stand-alone in VB6 che dovrà essere usato da diversi utenti, ciascuno sulla sua piattaforma. Fin qui niente di strano, ma ho implementato la possibilità di confrontare la versione di compilazione con quella contenuta in un file binario posto da me sul mio sito, al fine di informare i diversi utenti della disponibilità di aggiornamenti.
Ho implementato una routine che scarica il file binario (meno di 1kB) dal sito http.
Funziona tutto, anche se la connessione è assente, ma mi è capitato con un utente di avere connessione disponibile ed avere una lentezza esagerata del download, fatto che di per se provoca un blocco dell'applicazione.
Ho cercato in rete eventuali metodi alternativi che non blocchino l'applicazione durante il download, ma sono tutti troppo "completi" per le mie necessità, ossia includono barre di progresso, siti ftp, etc.
A me serve solo una funzione che sostituisca la mia API utilizzata per il download del file, ma che non blocchi l'applicativo.
La routine è la seguente (chiamata dall'evento click di un pulsante)
codice:
Public Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Public Sub CheckAggiornamenti()
On Error Resume Next
Dim errcode As Long, Urls As String, LocalFileNames As String, Versione As VerAggiornamento
Presentazione.Avvio.Caption = "Controllo Aggiornamenti..."
Presentazione.Avvio.Refresh
Urls = "http://miosito/ver.bin"
LocalFileNames = App.Path & "\ver.tmp"
errcode = URLDownloadToFile(0, Urls, LocalFileNames, 0, 0)
MioForm.Caption = "Mio - ver " & App.Major & "." & App.Minor & "." & App.Revision
If Err.Number = 0 And errcode = 0 Then
Open LocalFileNames For Binary As #1
Get #1, , Versione
Close #1
If CLng(App.Major) < Versione.Maggiore Or CInt(App.Minor) < Versione.Minore Or CInt(App.Revision) < Versione.Revisione Then
MioForm.Caption = MioForm.Caption & " - E' disponibile la versione " & Versione.Maggiore & "." & Versione.Minore & "." & Versione.Revisione & ", contattare me@gmail.com"
If Err.Number = 0 Or errcode = 0 Then Presentazione.Avvio.Caption = "Aggiornamento disponibile: ver. " & Versione.Maggiore & "." & Versione.Minore & "." & Versione.Revisione: Presentazione.Avvio.Refresh
Else
If Err.Number = 0 Or errcode = 0 Then Presentazione.Avvio.Caption = "La versione in uso è la più recente."
Presentazione.Avvio.Refresh
End If
End If
Kill App.Path & "\ver.tmp"
If Err.Number <> 0 Or errcode <> 0 Then
Err.Clear
Presentazione.Avvio.Caption = "Controllo Aggiornamenti non riuscito."
Presentazione.Avvio.Refresh
End If
On Error GoTo 0
End Sub
Dove Presentazione è un form che contiene la label Avvio, il resto sono variabili type fatte da me.
Ripeto che il sistema funziona su più di 20 macchine, ma su una no
, il che ha sollevato in me la perplessità oggetto di questa richiesta di aiuto
.
Ringrazio coloro i quali sappiano darmi delle indicazione.
Michele.