VB2008 Updater/Patcher Problem

04/21/2010 17:44 NeonBlue#1
Hallo,
Ich habe da ein Probleme mit einem Updater, ich wollte einen machen der über einen FTP-Server mehrere Dateien in einen Ordner lädt. Da ich in VB2008 noch Anfänger bin, habe ich mir bei YouTube ein paar TuTs gesucht und auf einen gestoßen der für mich aussreichen sollte.

Hier, dass ist leider sehr lang (38 Min.) aber vielleicht kennt es jemans schon.

Im Video werden am Ende mehrere Dateien hintereinander geladen wie z.b. ein Bild, Exe, Textdatei usw. und bei mir lädt der nur immer die "version.txt" runter sonst gar keine anderen. Egal was ich in die "files.txt" eintrage es wird immer nur die "version.txt" runtergeladen.

Könnt ihr mir vielleicht Helfen ?

Hier mein jetziger Code:
PHP Code:
Public Class frmMain

    
Private Sub frmMain_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
        statusVersion
.Text "Version " Application.ProductVersion
        
'Dim i As Integer = Application.ExecutablePath.LastIndexOf("\")
        '
Dim s As String Application.ExecutablePath.Remove(079)
        
'Updater.exe
        '
MsgBox(s)
    
End Sub

    
Private Sub UpdateProgram()
        
Dim base As String "http://Mein-FTP-Server/"
        
Dim startup As String Application.StartupPath
        
If (My.Computer.FileSystem.FileExists(startup "\version.txt")) Then
            My
.Computer.FileSystem.DeleteFile(startup "\version.txt")
        
End If
        
My.Computer.Network.DownloadFile(base "\version.txt"startup "\version.txt")
        
Dim newversion As Double Convert.ToDouble(My.Computer.FileSystem.ReadAllText(startup "\version.txt"))
        If (
newversion Application.ProductVersionThen
            
If (MsgBox("Neues Update verfügbar! Willst du gleich Updaten?"MsgBoxStyle.Question MsgBoxStyle.YesNo) = MsgBoxResult.YesThen
                
'download new version
                If (My.Computer.FileSystem.FileExists(startup + "\files.txt")) Then
                    My.Computer.FileSystem.DeleteFile(startup + "\version.txt")
                End If
                My.Computer.Network.DownloadFile(base + "\files.txt", startup + "\files.txt")
                Dim todownload As New TextBox
                todownload.Multiline = True
                todownload.Text = My.Computer.FileSystem.ReadAllText(startup + "\files.txt")
                Dim line As Integer = ""
                Dim exename As String = Application.ExecutablePath.Remove(0, Application.ExecutablePath.LastIndexOf("\") + 1)
                For Each line In todownload.Lines
                    If (line = exename) Then
                        My.Computer.Network.DownloadFile(base + line, startup + "\" + line + ".new")
                    Else
                        If (My.Computer.FileSystem.FileExists(startup + "\" + line)) Then
                            My.Computer.FileSystem.DeleteFile(startup + "\" + line)
                        End If
                        My.Computer.Network.DownloadFile(base + line, startup + "\")
                    End If
                Next
                MsgBox("Upadte war Erfolgreich! Der Updater wird Neugestartet!", MsgBoxStyle.Information)
                My.Computer.FileSystem.RenameFile(Application.ExecutablePath, exename + ".old")
                My.Computer.FileSystem.RenameFile(startup + "\" + exename + ".new", exename)
                Application.Restart()
            Else
                '
do not download new version
                MsgBox
("Ok..."MsgBoxStyle.Information)
            
End If
        
End If
    
End Sub

    
Private Sub NachUpdatesSuchenToolStripMenuItem_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles NachUpdatesSuchenToolStripMenuItem.Click
        UpdateProgram
()
    
End Sub
End 
Class 
Hoffe bin hier in der richtigen Sektion geht ja im Coding, falls nicht dann Bitte verschieben :D
04/21/2010 18:13 Cholik#2
#moved
04/21/2010 18:48 Elite-1337#3
mal debuggen:

- ist da "newversion" auch größer als "ProductVersion"?



Code:
If (My.Computer.FileSystem.FileExists(startup + "\files.txt")) Then
                    My.Computer.FileSystem.DeleteFile(startup + "\version.txt")
Warum löscht du eigentlich "version.txt", wenn "files.txt" vorhanden is?
05/03/2010 17:30 romaneso#4
ist bei mir genauso!
bitte um hilfe!
05/03/2010 17:42 Madd Eye#5
Schaut mal hier: [Only registered and activated users can see links. Click Here To Register...]

Damit spart ihr euch einen Haufen arbeit ^^
Und das ist für Anfänger gedacht
05/03/2010 17:59 romaneso#6
wenn es die seite noch gäbe?!
05/03/2010 18:20 romaneso#7
So0ry für doppelpost
aber kennt irgendwer einen funktionenden Updater?
glg.
05/03/2010 19:07 Madd Eye#8
Dann eben so:

Man benötigt:

- einen FTP server
- eine Form namens Form2
- ein Label namens Label2
- eine Datei namens "version.txt" auf dem FTP-Server
- einen Button namens Button1


Code:
Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If My.Computer.FileSystem.FileExists(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\version.txt") Then   ' Prüfen ob Datei vorhanden ist
        My.Computer.FileSystem.DeleteFile(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\version.txt")      ' Wenn ja löschen
    End If

    My.Computer.Network.DownloadFile("http://ftpadresse.de/version.txt", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\version.txt")   ' Datei Neu Downloaden - Hier den Link zu der version.txt

    Dim Stream As New IO.StreamReader(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\version.txt") ' Auslesen
    Dim z1 As String = Stream.ReadLine ' Inhalt der ersten Zeile wird in "z1" gespeichert
    Dim z2 As String = Stream.ReadLine ' Inhalt der zweiten Zeile wird in "z1" gespeichert
    Stream.Close()

    Dim lblt As Integer = Label2.Text
    If lblt < z1 Then' Wenn Label2.Text kleiner ist als "z1" dann
        My.Computer.Network.DownloadFile(z2, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\UpdateV" + z1 + ".exe") ' Neue .Exe in den Dokumenten Ordner laden (Downloadlink in "z2")
        MsgBox("Update wurde fertiggestellt.", MsgBoxStyle.Information, "IMail")  ' Nachricht wenn download erfollgreich war
    Else
        MsgBox("Kein Update gefunden", MsgBoxStyle.Information, "IMail") ' Nachricht wenn keine Updates vorhanden sind
    End If
    Me.Close() ' Schliessen
End Sub

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Label2.Visible = False
End Sub
End Class
In dem Label steht immer die aktuelle Version (in einer einstelligen Zahl - bei der neuen Version nicht vergessen die Zahl um 1 zu erhöhen)

Wenn man jetzt eine neue Version anbieten möchte, muss man in die Version.txt in der ersten Zeile die nächste Zahl reinschreben (zb 2 für version 2) und in der zweiten Zeile den Downloadlink.

Einfach ein wenig umschreiben dann geht das schon, denn damit kann man zuzeit nur eine Datei runterladen
05/04/2010 17:17 schido91#9
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Button1.Enabled = False
Button1.Text = "Please Wait..."
TextBox1.Text = "patch gestartet."
ProgressBar1.Value = "1"
Timer1.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
ProgressBar1.Value = "2"
TextBox1.Text = "Patch.txt wird geprüft."
If My.Computer.FileSystem.FileExists("patch.txt") Then
My.Computer.FileSystem.DeleteFile("Patch.txt")
TextBox1.Text = "patch.txt wurde gelöscht."
End If
My.Computer.Network.DownloadFile("http://www.undermoonshine.de/patch_undermoonshine_de/patchlist.txt", "patch.zxz")
TextBox1.Text = "Neue patch.txt runtergeladen."
ProgressBar1.Value = "3"
'-------------------------------------------Patchlist----------------------------------------

TextBox1.Text = "locale_de.eix wird geprüft."
If My.Computer.FileSystem.FileExists("pack/locale_de.eix") Then
My.Computer.FileSystem.DeleteFile("pack/locale_de.eix")
TextBox1.Text = "locale_de.eix wurde gelöscht."
End If
My.Computer.Network.DownloadFile("http://www.undermoonshine.de/patch_undermoonshine_de/patchlist.php", "pack/locale_de.eix")
TextBox1.Text = "Neue locale_de.eix runtergeladen."
ProgressBar1.Value = "4"
'-------------------------------------------Patchlist----------------------------------------
TextBox1.Text = "locale_de.epk wird überprüft."
If My.Computer.FileSystem.FileExists("pack/locale_de.epk") Then
My.Computer.FileSystem.DeleteFile("pack/locale_de-epk.")
TextBox1.Text = "locale_de.epk wurde gelöscht."
End If
ProgressBar1.Value = "5"
My.Computer.Network.DownloadFile("http://undermoonshine.de/patch_undermoonshine_de/locale_de.epk", "pack/locale_de.epk")
TextBox1.Text = "Neue locale_de.epk runtergeladen."

TextBox1.Text = "patchen erfolgreich"
ProgressBar1.Value = "100"

If My.Computer.FileSystem.FileExists("fd.exe") Then
Button1.Text = "xA Starten"
Button1.Enabled = True
If Button1.Text = "AX Starten" Then
Shell("hf.exe")
End If
Else
Button1.Text = "Client exestiert nicht!"
TextBox1.Text = "Client Runterladen!"
End If
Timer1.Stop()
End Sub
End Class


Das hab ich bissher, was du dadrinne ändern musst weist du wohl oder?
05/05/2010 21:52 NeonBlue#10
habe den thread etwas vergessen, danke für die antworten/posts werde es mir mal angucken