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.