Updater | mit FTP Server

    • VB.NET

    Es gibt 102 Antworten in diesem Thema. Der letzte Beitrag () ist von razzzer530i.

      Textdateien lassen sich auch direkt lesen... HTTPWebRequest oder Webclient (DownloadString). Die hier gepostete Methode ist generell nicht so sauber... ich persönlich mache es mit XML-Dateien. Die frage ich per HTTPWebRequest ab und setze auf den ResponseStream des HTTPWebResponse einen XMLTextReader auf.
      ICh hab das ganze mal bisschen anders gemacht, jedoch kommt immer nur dabei herraus dass es keine neue Version gäbe. Kann das mal wer untersuchen?

      VB.NET-Quellcode

      1. Public Class Form4
      2. Dim upfad As String = "C:\Programme\iApps\update"
      3. Dim pfad As String = "C:\Programme\iApps\Spiel"
      4. Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      5. Dim z1 As String
      6. If My.Computer.FileSystem.DirectoryExists(upfad) = False Then
      7. My.Computer.FileSystem.CreateDirectory(upfad)
      8. End If
      9. If My.Computer.FileSystem.FileExists(upfad & "\aversion.txt") = False Then
      10. My.Computer.FileSystem.WriteAllText(upfad & "\aversion.txt", "1", True)
      11. z1 = "1"
      12. Else
      13. Dim stream As New IO.StreamReader(upfad & "\aversion.txt")
      14. z1 = stream.ReadLine()
      15. stream.Close()
      16. End If
      17. Label1.Text() = z1
      18. End Sub
      19. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      20. If My.Computer.FileSystem.FileExists(upfad & "\version.txt") = True Then
      21. My.Computer.FileSystem.DeleteFile(upfad & "\version.txt")
      22. My.Computer.Network.DownloadFile("-", upfad & "\version.txt")
      23. Else
      24. My.Computer.Network.DownloadFile("-", upfad & "\version.txt")
      25. End If
      26. Dim rstream As New IO.StreamReader(upfad & "\version.txt")
      27. Dim z2 As String = rstream.ReadLine()
      28. rstream.Close()
      29. Dim z1 As String = Label1.Text()
      30. If CInt(z2) > CInt(z1) Then
      31. If My.Computer.FileSystem.DirectoryExists(pfad) = False Then
      32. My.Computer.FileSystem.CreateDirectory(pfad)
      33. My.Computer.Network.DownloadFile("-, upfad & "\SpielStation.exe") n
      34. My.Computer.FileSystem.MoveFile(upfad & "\SpielStation.exe", pfad & "\SpielStation.exe")
      35. 'My.Computer.FileSystem.DeleteFile(upfad & "\SpielSpaß.exe")
      36. MsgBox("Sie haben nun die neuste Version von SpielSpaß herunter geladen", , "Update")
      37. Else 'wenn z2 nicht größer als z1 ist dann...
      38. MsgBox("Es ist leider keine neue Version verfügbar")
      39. End If
      40. End If
      41. My.Computer.FileSystem.DeleteFile(upfad & "\version.txt")
      42. End Sub
      43. End Class
      Mal nebenbei:
      Wer mehrere Dateien runterladen möchte, da würde ich folgendes empfehlen:
      1 Textdatei aufem Server
      Dort ist in der ersten Zeile die Version und in der zweiten der Pfad zur exe.
      Zuerst wird kontrolliert ob die Version korrekt ist. Wenn es eine neue Version gibt, lädt man die Exe aus der zweiten Zeile runter und startet sie. Das Proggi, kann dann alle Dateien nochmal runterladen.

      So mach ich das immer, wenn ich mal ein Proggi mache, da man die Exe immer modifizieren kann, wie man will.
      A ok, danke, jetzt hab ich aber noch 2 Fargen: Geht es wenn das Prog was runterläd, dass das rutergeladene einfach direckt im selben Ordner als das Download-Programm ist.
      Und die 2 Frage war geht es darum die Dateien in einen Ordner nahe beim Patchprog zu speichern, wie zb bei meinem Chat prog dass er was in den Smileys-Ordner drin speichert also zb patch is bei C:/Progs/patch und ich will was in den ordner gespeichert haben C:/Progs/patch/Smileys aber ich will nicht dass die Nutzer immer den Pfad reinschreiben müssen.

      Hier das Script das ich immer benutze (Speichert leider bei Mydocuments):

      VB.NET-Quellcode

      1. If My.Computer.FileSystem.FileExists(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\patch.txt") Then ' Prüfen ob patch.txt da ist vorhanden ist
      2. My.Computer.FileSystem.DeleteFile(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\patch.txt") ' Wenn ja patch.txt löschen
      3. End If
      4. My.Computer.Network.DownloadFile("http://hp.de/patch.txt", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\patch.txt") ' Datei Neu Downloaden - Hier den Link zu der patch.txt


      Hoffe ihr versteht mich^^

      mfg, SnowDragon

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „SnowDragon“ ()

      Also ich bin das mal Schritt für Schritt durchgegangen und komme auf 3 Fehler. Hier mal mein komplett fertiger Code, der nicht funktioniert:

      VB.NET-Quellcode

      1. Public Class Form2
      2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      3. If My.Computer.FileSystem.FileExists(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\version.txt") Then ' Prüfen ob Datei vorhanden ist
      4. My.Computer.FileSystem.DeleteFile(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\version.txt") ' Wenn ja löschen
      5. End If
      6. My.Computer.Network.DownloadFile("http://iceload.net/multi/version.txt", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\version.txt") ' Datei Neu Downloaden - Hier den Link zu der version.txt
      7. Dim Stream As New IO.StreamReader(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\version.txt") ' Auslesen
      8. Dim z1 As String = Stream.ReadLine ' Inhalt der ersten Zeile wird in "z1" gespeichert
      9. Dim z2 As String = Stream.ReadLine ' Inhalt der zweiten Zeile wird in "z1" gespeichert
      10. Stream.Close()
      11. Dim lblt As Integer = Label2.Text
      12. If lblt < z1 Then ' Wenn Label2.Text kleiner ist als "z1" dann
      13. My.Computer.Network.DownloadFile(http://iceload.net/multi/Release.zip, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\UpdateV" + z1 + ".exe") ' Neue .Exe in den Dokumenten Ordner laden (Downloadlink in "z2")
      14. MsgBox("Update wurde fertiggestellt. Die neue Exe befindet sich in deinem Dokumenten Ordner.", MsgBoxStyle.Information, "IMail") ' Nachricht wenn download erfollgreich war
      15. Else
      16. MsgBox("Kein Update gefunden", MsgBoxStyle.Information, "IMail") ' Nachricht wenn keine Updates vorhanden sind
      17. End If
      18. Me.Close() ' Schliessen
      19. End Sub
      20. Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      21. Label2.Visible = False
      22. End Sub
      23. End Class


      Fehler 1 Der Name "http" wurde nicht deklariert. Zeile 16
      Fehler 2 ")" erwartet. Zeile 16
      Fehler 3 Syntaxfehler. Zeile 16

      Wäre echt lieb von euch, wenn ihr mal einen Blick drauf werfen könntet. Ich muss jetz schlafne gehn ich bin so fertig! Ich hoffe ihr findet was. Gut nacht!

      MfG, lace
      über form 1

      VB.NET-Quellcode

      1. Imports System.net
      2. Dim downloader As New System.Net.WebClient

      server erstellen -> txt datei mit version zb 1.0.0.0 reinschreiben und als update.txt hochladen
      um update zu laden dann macht ihr einfach 1.0.0.0 zu 2.0.0.0 zu 3.0.0.0 usw

      in form1_load

      VB.NET-Quellcode

      1. Dim Web as new webclient
      2. dim update as String = Web.Downloadstring("ftpserver/update.txt")
      3. If update.StartsWith(1) Then MsgBox("Keine Neuen Updates")
      4. If update.StartsWith(2) Then downloader.DownloadFile("server/update.exe","update.exe")
      5. If update.StartsWith(2) Then MsgBox("Update Runtergeladen")
      6. If update.StartsWith(2) Then application.exit()
      7. If update.StartsWith(2) Then kill ("alteexe.exe")
      8. If update.StartsWith(2) then My.Computer.FileSystem.RenameFile("update.exe", "alteexe.exe")
      9. End If


      und in der Updated exe machste einfach so

      VB.NET-Quellcode

      1. Dim Web as new webclient
      2. dim update as String = Web.Downloadstring("ftpserver/update.txt")
      3. If update.StartsWith(2) Then MsgBox("Keine Neuen Updates")
      4. If update.StartsWith(3) Then downloader.DownloadFile("server/update.exe","update.exe")
      5. If update.StartsWith(3) Then MsgBox("Update Runtergeladen")
      6. If update.StartsWith(3) Then application.exit()
      7. If update.StartsWith(3) Then kill ("alteexe.exe")
      8. If update.StartsWith(3) then My.Computer.FileSystem.RenameFile("update.exe", "alteexe.exe")
      9. End If


      USW

      oder so :D is viel leichter is schon länger her kann mich nich an den code erinnern ;) aber so sollte es eig sein

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „007gamer“ ()

      und der da wäre?
      wenn du wirklich Integer.Parse eingetippt hast sollte es gehen, wie hast du es denn eingetippt?
      Edit: naja oder direkt...
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---