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)
Dove Presentazione è un form che contiene la label Avvio, il resto sono variabili type fatte da me.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
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.

, il che ha sollevato in me la perplessità oggetto di questa richiesta di aiuto
.
Rispondi quotando