Lupetto (Normal User)
Newbie
Messaggi: 5
Iscritto: 08/01/2008
|
Ciao a tutti
Vorrei sapere come inserire un aggiornamento automatico nella mia applicazione(vb6)
L'ho visto in molte applicazioni usate in vb6,
ho pensato che si dovrebbe usare l'inet, ma non ho la minima idea di come fare.
spero che mi possiate dare una mano, ciau a presto
|
|
kryc (Ex-Member)
Rookie
Messaggi: 36
Iscritto: 11/12/2007
|
per far si che gli utenti scarichino l'aggiornamento, dal host remoto in cui lo upperai, devi usare il controllo inet.
Aggiungi il controllo inet al progetto, nella proprietà Protocol, metti icFTP E in remote port metti 21
Dopodiche inserisci questo codice al caricamento del form
Codice sorgente - presumibilmente Visual Basic 6 |
Inet1.Execute "ftp://TuoAccount:TuaPassword@ftp.TuoHost", "GET ." & "\" & nomefile & " " & nomefile
While Inet1.StillExecuting: DoEvents: Wend
|
prova così
|
|
BytE-FucK (Normal User)
Pro
Messaggi: 171
Iscritto: 09/10/2007
|
Allora:
Aggiungi il controllo inet come detto sopra...
Uppa sul tuo sito(prova.it) un file chiamato versione.txt con scritto 2.0.0,che è l'attuale versione disponibile.
Quindi avrai www.prova.it/versione.txt
Adesso il controllo inet,anche senza autentificazione ftp andrà a prendere la versione e confronterà con quella in uso dal programma(facciamo in questo caso vekkia,1.0.0)
quindi fai una cosa tipo :
Codice sorgente - presumibilmente VB.NET |
Dim versione as string versione = inet1.openurl("www.sito.it/versione.txt") if versione > [b]app.version[/b] then SCARICA() else MsgBox "Non ci sono nuove versioni" end if
|
Non è molto difficile,la parte che ti ho grassettato permette di sapere la versione dell'applicazione che si setta il project proprietes
Per quanto riguarda la funzione scarica è semplice metti un semplice UrlFileToDownload ( API ) e scarichi exename & version ...
Se non hai capito qualcosa posta
|
|
Lupetto (Normal User)
Newbie
Messaggi: 5
Iscritto: 08/01/2008
|
Ho risolto facendo così:
in una label ho messo la versione corrente e in una txt non visibile ho messo che leggeva il file txt.
poi ho messo un progressbar che aumenta e una volta arrivato a 100 verifica se il testo contenuti nella text e nella label sono uguali dice versione aggiornata altrimenti dice ci sono aggiornamenti disponibili.
Sotto vi posto il codice che ho usato:
Codice sorgente - presumibilmente VB.NET |
Private Sub Form_Load() Dim inet As Object Dim b() As Byte Const icByteArray = 1 Set inet = CreateObject("InetCtls.Inet") b() = inet.OpenURL("http://www.sito.it/versione.txt", icByteArray) Text1.Text = StrConv(b, vbUnicode) Set inet = Nothing End Sub Private Sub Timer1_Timer() If ProgBarXP1.Value = 100 Then If Text1.Text = Form1.Label10.Caption Then MsgBox "Versione Aggiornata" Else MsgBox "Nuovi aggiornamenti disponibili" End If Timer1.Enabled = False Form2.Hide Unload Me Else ProgBarXP1.Value = ProgBarXP1.Value + 1 End If End Sub
|
Ultima modifica effettuata da Lupetto il 09/01/2008 alle 17:32 |
|
gvigliani (Normal User)
Pro
Messaggi: 106
Iscritto: 30/12/2006
|
Ciao ragazzi, faccio notare che con la funzione utilizzata , il programma verrebbe caricato correttamente soltanto una prima volta. Questo perche' dopo il downloading, una copia del file verrebbe memorizzata nella directory temporanea di intenet explorer. Al successivo downloading, questo verrebbe intercettato e presumendo che si voglia scaricare lo stesso file , erroneamente, quello che verrebbe scaricato sarebbe solo quello memorizzato nella cache. Il problema è conosciuto e di non facilissima soluzione. La funzione da richiamare è la
FtpGetFile ma, da sola non serve a niente se non è correttamente supportata ed implementata. Altro problema è che, se il file da aggiornare è in uso, il sistema operativo non permettera' mai la sua cancellazione o sostituzione. Io, ho risolto il problema creando il programma di aggiornamento esterno al programma principale che una volta chiamato chiude il precedente richiamandolo. Una volta completato il download e la sostituzione, questo dovrebbe pensare alla sua chiusura ed al richiamo del programma principale.
Ci vuole piu' a dirlo che a farlo. Un'altra cosa di cui bisogna tener conto è che il file di aggiornamento deve avere una estensione diversa da .exe altrimenti qualsiasi sito lo rifiuterebbe. Quindi bisogna attrezzare il programma principale a creare un aggiornamento .zip ed un download che pensi anche allo scompattamento dello stesso. Se vuoi degli esempi non hai che da chiedere. Ti bastera' sostituire il file che vuoi trasferire e ricevere ed il gioco è fatto.
Saluti
|
|
Lupetto (Normal User)
Newbie
Messaggi: 5
Iscritto: 08/01/2008
|
gvigliani, grazie per questo chiarimento.
non ho capito la cosa del file temporaneo che salva ie... io per scaricare uso questo
Codice sorgente - presumibilmente VB.NET |
Private Declare Function DoFileDownload Lib "shdocvw.dll" (ByVal lpszFile As String) As Long Private Sub Command1_Click() Dim sDownload As String sDownload = StrConv(Link, vbUnicode) Call DoFileDownload(sDownload) End Sub
|
Poi ho capito il fatto che se è in eseguzione non lo fa cancellare e infatti farò in modo che una volta ke ha iniziato a scaricare il programma si chiuda e quindi l'utente avvia il nuovo setup (anche se verrebbe in modo grezzo) comunque vista la tua disponibilità un sorgente non farebbe male
Ultima modifica effettuata da Lupetto il 09/01/2008 alle 23:26 |
|
BytE-FucK (Normal User)
Pro
Messaggi: 171
Iscritto: 09/10/2007
|
Ottimo lupetto...
Comunque il problema che memorizza il file,è risolvibile cancellandolo dalla directory temporanea...
Un altra cosa,credo che non venga salvato nulla,perche inet mette il tutto nella variabile specificata,o la label
|
|
Jamester (Normal User)
Newbie
Messaggi: 1
Iscritto: 08/07/2009
|
Postato originariamente da Lupetto:
Ho risolto facendo così:
in una label ho messo la versione corrente e in una txt non visibile ho messo che leggeva il file txt.
poi ho messo un progressbar che aumenta e una volta arrivato a 100 verifica se il testo contenuti nella text e nella label sono uguali dice versione aggiornata altrimenti dice ci sono aggiornamenti disponibili.
Sotto vi posto il codice che ho usato:
Codice sorgente - presumibilmente VB.NET |
Private Sub Form_Load() Dim inet As Object Dim b() As Byte Const icByteArray = 1 Set inet = CreateObject("InetCtls.Inet") b() = inet.OpenURL("http://www.sito.it/versione.txt", icByteArray) Text1.Text = StrConv(b, vbUnicode) Set inet = Nothing End Sub Private Sub Timer1_Timer() If ProgBarXP1.Value = 100 Then If Text1.Text = Form1.Label10.Caption Then MsgBox "Versione Aggiornata" Else MsgBox "Nuovi aggiornamenti disponibili" End If Timer1.Enabled = False Form2.Hide Unload Me Else ProgBarXP1.Value = ProgBarXP1.Value + 1 End If End Sub
|
|
Potresti spiegare meglio questo codice? Dov'e' che fa il controllo cn il testo del file versione.txt? io vedo un txt e una label nella stessa form. Ho provato cosi come lo hai scritto il codice cambiando il sito e il nome della form ma non succede assolutamente niente |
|