Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Salve a tutti, mi sono appena iscritto e non so molto di Visual Basic 2010.
Vorei sapere come si estrae un file zip da un programma.
Ho fatto un programma ( installer ) che dovrebbe installare un pacchetto mod in un gioco, Una volta scaricato, ho messo un pulsante Avanti che permette di passare al form successivo. In questo form, c'è un bottone ( installa ), al suo clic dovrebbe estrarre il file zip in C:\mods\ chiamato label4.text nella directory form1.textbox1.text
Ricordate che non so quasi nulla, quindi non rimandatemi al altre pagine, ma cercate di spiegarmi bene come fare.
Grazie a tutti
Ciao e grazie.
Alla fine sono riuscito ad implementare DotNetZip...
Ora vorrei creare un'updater che nell'evento Load del Form3, cerca nuovi aggiornamenti e se ci sono, scarica il nuovo setup.
Non riesco a capire come fare.
Dovresti implementare una parte lato server da hostare su un spazio web, per poter ottenere l'ultima versione: se si tratta di un progetto piccolo puoi anche usare un semplice file txt, altrimenti è meglio implementare un database con tutte le versioni e una pagina dinamica che restituisce la più recente. Dal tuo programma poi puoi utilizzare la classe webclient per fare una richiesta via http in modo da ottenere l'ultima versione, poi la confronti con la versione corrente e, se è più recente, scarichi lo zip (sempre con il webclient) e lo estrai.
Dovresti implementare una parte lato server da hostare su un spazio web, per poter ottenere l'ultima versione: se si tratta di un progetto piccolo puoi anche usare un semplice file txt, altrimenti è meglio implementare un database con tutte le versioni e una pagina dinamica che restituisce la più recente. Dal tuo programma poi puoi utilizzare la classe webclient per fare una richiesta via http in modo da ottenere l'ultima versione, poi la confronti con la versione corrente e, se è più recente, scarichi lo zip (sempre con il webclient) e lo estrai.
Grazie
Sono riuscito a risolvere così:
nell'evento load del form3, ho messo che doveva confrontare la versione del txt e la versione del programma, se erano uguali allora continuava, altrimenti apriva un nuovo exe ( creando un nuovo progetto ) che cancellava il vecchio exe, scaricava quello nuovo e lo rimetteva dove si trovava.
Grazie
Sempre riferito allo stesso argomento, vorrei che i dll si trovino nella risosa del programma e poterle utilizzare da li.
Sostanzialmente il problema è che nella cartella dove c'è l'exe ci devono essere anche i dll. Come posso aggiungere le dll alle risorse del programma e utilizzarle da lì ( tipo come le icone ) ?
Ho aggiungo le dll alle risorse però non le vede.
Grazie
Per l'updater ecco i codici che ho usato nell'evento load del primo form:
Codice sorgente - presumibilmente VB.NET
Dim richiesta As System.Net.HttpWebRequest= System.Net.HttpWebRequest.Create("http://miositoaltervista/cartella/versione.txt")
Dim risposta As System.Net.HttpWebResponse= richiesta.GetResponse()
Dim LS As System.IO.StreamReader=New System.IO.StreamReader(risposta.GetResponseStream())
Dim nuovaversione AsString= LS.ReadToEnd
If nuovaversione = My.Application.Info.Version.ToStringThen
MsgBox("Updater è un componente del Mod Pack.exe", MsgBoxStyle.Information, "Updater")
End
EndIf
EndSub
PrivateSub downloader_DownloadFileCompleted(ByVal sender AsObject, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)Handles downloader.DownloadFileCompleted
Non ho ben capito qual è il problema delle librerie, comunque quell'errore è dovuto al fatto che non hai inizializzato il webclient; sostituisci
Codice sorgente - presumibilmente C# / VB.NET
Dim WithEvents downloader As WebClient
con
Codice sorgente - presumibilmente VB.NET
DimWithEvents downloader AsNew WebClient
Grazie, sono riuscito a risolvere
Ora che però ho riprovato c'è qualcosa che non va:
Nel Form2 ci sono 2 Radiobutton. Nel 1° c'è il pacchetto meno "pesante", nel 2° c'è quello con le statistiche.
Andando avanti, nel Form successivo, il Form7, chiedo di selezionare se usare o meno il tasto shift.
Poi nel Form successivo, il Form1, deve scaricare il file selezionato nel radiobutton del form2, solo che qualsiasi opzione scelgo, delle 2, mi scarica(va la prima) la 2° opzione.
ecco il codice che scarica:
Codice sorgente - presumibilmente VB.NET
PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)HandlesMyBase.Load
'se la directory C:\mods non esiste
If My.Computer.FileSystem.DirectoryExists("C:\"&"mods\")=FalseThen
'allora la crea
MkDir("C:\mods")
EndIf
'imposta testo label5=0%
Label5.Text="0%"
'se è stato selezionato il pacchetto lite in precedenza
' lo scarica
If Form2.RadioButton1.CheckedThen
Label4.Text="Pacchetto_Lite.zip"
If My.Computer.FileSystem.FileExists("C:\mods\Pacchetto_Lite-1.0.zip")Then
Label1.Text="Pacchetto già scaricato!"
MsgBox("Il pacchetto è già stato scaricato!", MsgBoxStyle.Information, "Già Scaricato")
come puoi vedere, nell'evento load del Form, deve richiamare i radiobutton del Form2, solo che non so per quale motivo mi scarica sempre la stessa cosa puravendo scelto un'opzione diversa...
Stai facendo riferimanto alla classe Form2 invece che all'istanza. Il valore booleano che indica cosa si deve scaricare divresti passarlo dal form dove ci sono i radiobutton al costruttore di quello che fa il download. In altre parole, dichiara nel form1 (quello di cui hai postato il codice del load) che prenda il parametro e lo assegni a una variabile goobale
Codice sorgente - presumibilmente VB.NET
Dim Versione AsBoolean
SubNew(ByVal v AsBoolean)
Versione = v
EndSub
Poi sostuisci la riga di prima con
Codice sorgente - presumibilmente C# / VB.NET
If versione Then
E nel form2, nel punto dove inizializzi il form1 ([ot]ti consiglierei di dare dei nomi più significativi a questi form, e anche ai controlli, perchè altrimenti ci si capisce poco[/ot]) passi il parametro corretto (ovvero radiobutton1.checked)