Brauche hilfe beim programmieren von updater

04/16/2013 14:34 vbcji#1
Hey com

ich brauche dringend hilfe bei meinem updater für ein spiel.
ich will so ein updater machen wie bei z.b. World of Tanks.
das der nach updates sucht dann wen welche da sind runterläd und gleich da hin installiert wo es hin soll also in das game verzeichnis.
ich möchte eine progressbar haben und ein feld wo dann steht was bei dem update neu ist.
ich habe einen schon gemacht aber irgend wie geht das alles nicht ich hinterlege mal ein bild

und den code auch.

villeicht gibt es ja schon ein thema dazu oder ein tut wäre gut wenn ihr mir dann das zeigt.
(ich bin noch ein "anfänger" darin :D )
habe zwar schon ein bissel programmiert und so aber nicht sowas :D


Code:
Imports System.Net

Public Class Form1

    Private WithEvents wc1 As WebClient
    Private WithEvents wc2 As WebClient
    Dim lbl_progress As Object

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Button1.Text = "Suche..."
        Button1.Enabled = False
        update()
    End Sub


    Sub update()
        wc1 = New WebClient

        If wc1.DownloadString("") <> "1.0" Then
            MsgBox("Es werden Updates heruntergeladen", MsgBoxStyle.Information, "Update-Ergebnis")
            download("")
        Else
            MsgBox("keine updates vorhanden", MsgBoxStyle.Information, "update-Ergebnis")
            Button1.Enabled = True
            Button1.Text = "Nach Updates suchen"
        End If
    End Sub


    Sub download(ByVal url As String)
        wc2 = New WebClient
        wc2.DownloadFileAsync(New Uri(url), "My.Computer.Network.DownloadFile(path, Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "/" & version & "" & "version.txt")
    End Sub


    Private Sub wc2_donloadcompleted(ByVal sender As Object, ByVal w As System.ComponentModel.AsyncCompletedEventArgs) Handles wc2.DownloadFileCompleted
        MsgBox("Download abgeschlossen", MsgBoxStyle.Information, "Download")
        Button1.Enabled = True
        Button1.Text = "nach Updates suchen"
        pgb_progress.Visible = False
        lbl_progress.Visible = False

    End Sub

    Private Sub wc2_Downloadchanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles wc2.DownloadProgressChanged
        pgb_progress.Visible = True
        lbl_progress.Visible = True

        pgb_progress.Value = e.ProgressPercentage
        lbl_prgress.Text = e.ProgressPercentage.ToString & "%"

    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        End
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Process.Start("http://www.google.de")
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim Programm As Long
        Programm = Shell("notepad.exe", vbNormalFocus)
        End
    End Sub
End Class


das habe ich schon gemacht :D aber es soll ja automatisch instalieren :D und wenn noch kein game vorhanden ist das dann ausgesucht wird wohin das alles runtergeladen werden soll.


das rot umrandete ist wie es aussehen soll mit progressbar und % anzeige dadrüber soll dann stehen was neu ist im update.

[Only registered and activated users can see links. Click Here To Register...]




Viele dank für eure hilfe.

lg vbcji
04/16/2013 15:44 »x«#2
Es gibt manche Programme (z.b. VLC-Mediaplayer oder FileZilla), wenn die ein Update durchführen wollen, wird die neue Setup-Anwendung runtergeladen und alles wird zusammen mit den Updates neu installiert.
Wenn du es so machen würdest, wäre es besser, solange die Game-Daten eine kleine Größe haben (z.b. zwischen 10-25 mb). Als Setup-Anwendung könntest du Programme like Nullsoft-Install-System benutzen. Nachteil ist du müsstest jeden Update eine neue Setup erstellen, was eigentlich nicht so schwierig ist.

Der Code für dein Update könnte dann ungefähr so aussehen:
Code:
Sub vUpdate()
	Dim web As New Net.WebClient
	If My.Computer.Network.IsAvailable = True Then
		Try
			If Not web.DownloadString("http://deineseite.com/update/neueversion.txt") = "1.1.0.1" Then
				If MsgBox("Do you want to download the latest version?", MsgBoxStyle.YesNo, "New version available!") = MsgBoxResult.Yes Then
					Try
						My.Computer.Network.DownloadFile("http://deineseite.com/neueversion/setup.exe", Application.StartupPath & "\New Version.exe", "", "", True, 500, True)
						MsgBox(web.DownloadString("http://deineseite.com/update/changelog.txt"))
						Process.Start(Application.StartupPath & "\New Version.exe")
						Me.Close()
					Catch ex As Exception
						MsgBox("Failed to download Updates!", MsgBoxStyle.Critical, "Error occured!")
					End Try
				End If
			End If
		Catch ex As Exception
			Exit Sub
		End Try
	End If
End Sub
04/16/2013 15:59 mKeey#3
Mal den Code von >>x<< kopiert und meinen Senf dazu gegeben.

PHP Code:
    Private Sub WC_DownloadProgressChanged(ByVal sender As ObjectByVal e As DownloadProgressChangedEventArgsHandles WC.DownloadProgressChanged
        ProgressBar1
.Value e.ProgressPercentage
        Me
.Label1.Text e.ProgressPercentage.ToString "%"
    
End Sub

    Dim WithEvents WC 
As New WebClient
    
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
        Me
.Label1.Visible True
        Me
.Label1.Text "0%"
        
vUpdate()
    
End Sub

Sub vUpdate
()
    
Dim web As New Net.WebClient
    
If My.Computer.Network.IsAvailable True Then
        
Try
            If 
Not web.DownloadString("http://deineseite.com/update/neueversion.txt") = "1.1.0.1" Then
                
If MsgBox("Do you want to download the latest version?"MsgBoxStyle.YesNo"New version available!") = MsgBoxResult.Yes Then
                    
Try
                        
My.Computer.Network.DownloadFile("http://deineseite.com/neueversion/setup.exe"Application.StartupPath "\New Version.exe"""""True500True)
                        
MsgBox(web.DownloadString("http://deineseite.com/update/changelog.txt"))
                        
Process.Start(Application.StartupPath "\New Version.exe")
                        
Me.Close()
                    Catch 
ex As Exception
                        MsgBox
("Failed to download Updates!"MsgBoxStyle.Critical"Error occured!")
                    
End Try
                
End If
            
End If
        Catch 
ex As Exception
            
Exit Sub
        End 
Try
    
End If
End Sub 
04/16/2013 16:06 »x«#4
@mKeey
Code:
My.Computer.Network.DownloadFile("http://deineseite.com/neueversion/setup.exe", Application.StartupPath & "\New Version.exe", "", "", [B]True[/B], 500, True)
Das erste True steht dafür, dass ein Progressbar angezeigt werden soll, während des Downloads (aber wahrscheinlich ohne Prozentangabe)
Trotzdem könnte man es auch so machen, wie du es geschrieben hast.
04/16/2013 16:08 mKeey#5
Hab das ganze eben schnell in 2 Minuten überflogen, deinen Code gesehen und mein Senf dazu abgegeben, im Nachhinein das durchlesen nochmal, sieht man das einiges von mir gar nicht gebraucht wird. Dennoch erfüllt beides seinen zweck.
04/16/2013 16:21 vbcji#6
danke für die schnelle antwort
aber..
ich möchte das ich wen ich auf den button start gehe womit das spiel dann gestartet werden soll erst nach updates suchen soll dann wen updates da sind das er die automatisch gleich runterläd wen keine updates dann da sind das dann das spiel normal gestartet wird und ich weiß ja nicht wo die leute von meinem spiel den ordner hin packen also muss das programm ja irgend wie das automatisch installieren.
also bitte ein kleines tut machen oder erklären ich bin anfänger und weiß nicht richtig was ich damit anfangen soll :D

danke trotsdem für die hilfe

oder schickt ein link wo einer so ein updater schon gemacht hat und es da erklärt wie es geht.

lg vbcji
04/16/2013 16:57 mKeey#7
Quote:
Originally Posted by »x« View Post
[Only registered and activated users can see links. Click Here To Register...]
Das könnte dir vielleicht weiterhelfen, falls du Englisch kannst. Du könntest es erweitern und nach deiner Vorstellungen nach anpassen.
Sollte auch dieses nicht helfen, solltest du Dir ein Buch Kaufen im Wert von max. 50€, darin fängst du an zu lernen.
Man sollte mit den Knochen was man hingeworfen bekommt, ein Skelet daraus basteln können.

Ein Tipp, versuch mal vUpdate() in ein Button_Click Event zu machen und schau mal was dann passiert.
04/16/2013 22:30 vbcji#8
ich will mir nicht extra ein buch dafür kaufen damit ich einen updater machen kann ich will nur das projeckt noch machen
..
also brauche ich lösungs beispiele
bitte

lg vbcji
04/17/2013 07:27 mKeey#9
@»x«
Nein

@vbcji
Downloade Dir den Anhang, ändere das was du brauchst, hab Dir alles so einfach wie möglich gemacht. Du kannst die Textbox auch weg lassen und den Link direkt in den Code setzen.
Ändere [Only registered and activated users can see links. Click Here To Register...] / version.txt zu deiner Webadresse.

Du kannst das ganze noch schöner machen, wenn der Download fertig ist, soll er das ganze normal Starten und den Updater Beenden.

In dem Sinne viel Spaß damit.