20/11/13 22:48
DHD
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
aaa
21/11/13 18:45
GN
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.
aaa
21/11/13 22:19
DHD
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:
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 As String = LS.ReadToEnd
If nuovaversione = My.Application.Info.Version.ToString Then
ElseIf nuovaversione > My.Application.Info.Version.ToString Then
System.IO.File.CreateText(Application.StartupPath & "\update.updater")
Process.Start(Application.StartupPath & "\Updater.exe")
End
End If
e nel nuovo progetto:
Imports System
Imports System.IO
Imports System.Net
Public Class Form1
Dim WithEvents downloader As WebClient
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Hide()
If File.Exists(Application.StartupPath & "\update.updater") Then
System.IO.File.Delete(Application.StartupPath & "\Mod_pack.exe")
downloader.DownloadFileAsync(New Uri("http://miositoaltervista/cartella/Mod_Pack.exe"), Application.StartupPath & "\Mod_Pack.exe")
Else
MsgBox("Updater è un componente del Mod Pack.exe", MsgBoxStyle.Information, "Updater")
End
End If
End Sub
Private Sub downloader_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles downloader.DownloadFileCompleted
MsgBox("Aggiornamento completato!", MsgBoxStyle.Information)
System.IO.File.Delete(Application.StartupPath & "\update.updater")
End
End Sub
End Class
solo che se eseguo il programma, ( modpack.exe ), crea il file, apre l'updater e si chiude, mi dà un'errore. Eccp cosa c'è nella finestra di errore:
Le informazioni su come richiamare il debug JIT (Just-In-Time) anziché questa finestra
sono riportate in fondo al messaggio.
************** Testo dell'eccezione **************
System.NullReferenceException: Riferimento a un oggetto non impostato su un'istanza di oggetto.
in Updater.Form1.Form1_Load(Object sender, EventArgs e)
in System.EventHandler.Invoke(Object sender, EventArgs e)
in System.Windows.Forms.Form.OnLoad(EventArgs e)
in System.Windows.Forms.Form.OnCreateControl()
in System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
in System.Windows.Forms.Control.CreateControl()
in System.Windows.Forms.Control.WmShowWindow(Message& m)
in System.Windows.Forms.Control.WndProc(Message& m)
in System.Windows.Forms.ScrollableControl.WndProc(Message& m)
in System.Windows.Forms.ContainerControl.WndProc(Message& m)
in System.Windows.Forms.Form.WmShowWindow(Message& m)
in System.Windows.Forms.Form.WndProc(Message& m)
in System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
in System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
in System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
( non ho copiato tutti gli assembly )
Grazie ancora
Ultima modifica effettuata da DHD 21/11/13 22:25
aaa