Updater für Programm

    • VB.NET

    Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Mike.

      Updater für Programm

      ErfinderDesRades - Moderator - Notiz:
      Von der Verwendung selbstgebastelter Update-Systeme raten wir ab - Zu leicht kann ein Angreifer Schad-SoftWare einschleusen.
      Professionelle Update-Systeme, die heutigen Sicherheits-Standards besser gerecht werden, gibt es auch als Freeware



      Also ich zeige heute einen Updater fürs Programm:

      Ihr könnt es z.B in die Start-Form und danach die Hauptform zeigen(Nur ein Beispiel).
      Geht natürlich auch anders!
      Was ihr benötigt:
      -FTP Server
      -VisualBasic
      -Grundlagen(um manche sachen zu verstehen xD)

      -Brain.exe(um Code anzupassen)


      Also fangen wir an:
      Toolbox-Elemente:
      -PB1 (ProgressBar)
      -btUpdate (Button) -Dieser Button führt dass Update durch
      -btWeiter - Wenn kein Update oder No gedrückt wird Kommt dieser Button
      -lblStatus(Label)
      Label für Download anzeige... (lblStatus)
      Dass war erstmal!


      Nun fangen wir an mit den Codes:

      Hier erstmal Deklarationen und der Import:
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Imports System.Net
      2. Public Class Form1
      3. Private WithEvents WebClient1 As New WebClient
      4. Dim pgversion As String = "1.0"
      5. '*Programm version - Geht auch so: *
      6. '*Dim pgversion2 As String = IO.File.ReadAllText("Pfad der programm version")*
      7. '*Machts wie ihr wollt *
      8. Dim aktversion As String = WebClient1.DownloadString("Addresse der Aktuellen version")
      9. Dim dialog As New SaveFileDialog
      10. Dim pfad As String
      11. '* Selbst erklärend :)*

      Und jetzt der eigentliche Code buttonUpdate Click event:
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Private Sub btUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btUpdate.Click
      2. dialog.Filter = "(*.exe)|" 'usw.:
      3. '* 'Filter des Dialogs, passt es an! Bsp: (*.form)| Dass:[|]-Abschluss strich *
      4. dialog.Title = "Update speichern unter..."
      5. '* 'Titel des dialogs
      6. If MessageBox.Show("Ihre Version ist: " & pgversion & vbNewLine & "Die Version des Updates ist: " & aktversion & vbNewLine & "Wollen sie Updaten?", "Update?", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then 'Wenn ja zu Update gedrückt wird:
      7. 'vbNewLine ist "Enter"
      8. If dialog.ShowDialog = Windows.Forms.DialogResult.OK Then 'Wenn bei dialog OK gedrückt wird:
      9. Try 'Try Block um Fehler abzufangen
      10. pfad = dialog.FileName 'Dann ist Variable "pfad" der Pfad unter den ihr gespeichert habt
      11. WebClient1.DownloadFileAsync(New Uri("Addresse der Download Datei"), pfad) 'Webclient downloaded Async(Kein einfrieren)
      12. Catch ex As Exception
      13. MsgBox("Fehler: " & ex.Message)
      14. End Try
      15. If IO.File.Exists(pfad) Then 'Hier wird dann überprüft ob dass update existiert
      16. Process.Start(pfad) 'Wenn ja dann wird es gestartet + dieses programm geschlossen
      17. Me.Close()
      18. End If
      19. ElseIf Windows.Forms.DialogResult.Cancel Then 'Wenn bei dialog Chanel Gedrückt wird dann:
      20. Me.Hide() 'Könnt auch anderes machen...
      21. Hauptform.Show()
      22. ElseIf pfad = Nothing Then 'Wenn pfad nichts ist dann:
      23. Me.Hide() 'Ebenfalls
      24. Hauptform.Show()
      25. End If 'End If für dialog abfrage
      26. ElseIf MsgBoxResult.No Then ' Wenn nein zur MsgBox gedrückt wird:
      27. btUpdate.Visible = False 'Update button wird nicht gezeigt
      28. btWeiter.Visible = True ' Weiter button wird gezeigt
      29. End If 'End if für messagebox abfrage
      30. End Sub

      Form Load Event um zu Schauen Ob Update verfügbar ist:
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      2. If pgversion < aktversion Then 'Wenn die Programmversion kleiner als die Aktuelle Version ist:
      3. btUpdate.Visible = True
      4. btUpdate.PerformClick() ' Button wird einfach gedrückt
      5. ElseIf aktversion < pgversion Then ' Wenn es größer ist:
      6. btUpdate.Visible = False
      7. btWeiter.Visible = True ' Dann wird der Weiter button gezeigt
      8. End If ' End if für Versions abfrage
      9. End Sub

      Und nun der Button Weiter welchen ihr genau so groß macht wie Update und auch an den gleichen ort verschiebt:
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Private Sub btWeiter_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btWeiter.Click
      2. Me.Hide()
      3. Hauptform.Show()
      4. End Sub

      Und um den Status anzuzeigen: Im WebClient Progress Changed Event:
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Private Sub WebClient1_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles WebClient1.DownloadProgressChanged
      2. Dim by As String = e.BytesReceived
      3. Dim by2 As String = e.TotalBytesToReceive
      4. Dim by3 As String = "Bytes/"
      5. Dim by4 As String = "Bytes"
      6. If by2 > 1024 Then ' Wenn es 1024 Bytes sind (1KB) Dann ist die Ausgabe in KB's
      7. by = e.BytesReceived / 1024
      8. by2 = e.TotalBytesReceived / 1024
      9. by3 = "KB/"
      10. by4 = "KB"
      11. ElseIf by2 > 1048576 Then ' Wenn die Bytes insgesamt 1 MB sind ist die Ausgabe in MB's
      12. by = e.BytesReceived / 1024 / 1024
      13. by2 = e.TotalBytesReceived / 1024 / 1024
      14. by3 = "MB/"
      15. by4 = "MB"
      16. ElseIf by2 > 1073741824 Then ' Wenn es GB ist ...
      17. by = e.BytesReceived / 1024 / 1024 / 1024
      18. by2 = e.TotalBytesReceived / 1024 / 1024 / 1024
      19. by3 = "GB/"
      20. by4 = "GB"
      21. End If 'Dieser Code durchläuft jetzt die größe und wenn es größer 1kb ist wird es als
      22. 'KB angezeigt
      23. With PB1
      24. .Value = e.ProgressPercentage
      25. lblStatus.Text = by & by3 & by2 & by4
      26. End With
      27. End Sub


      Bitte Feedback! Eventuelle Fehler posten!
      Dateien
      • Update-TUT.zip

        (111,98 kB, 336 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 23 mal editiert, zuletzt von „ErfinderDesRades“ () aus folgendem Grund: Code-Total bei (Total)BytesReceived vergessen.

      Hey super Sache,

      habe damit gerade mein eigenen kleinen Updater gebastelt, allerdings ist die Fortschrittsanzeige nicht wirklich brauchbar, da die erst angezeigt wird, wenn der Download abgeschlossen ist, habe das gerade mal mit einer 200MB Datei getestet.

      Edit: Ne ist doch nicht so, war ein Fehler den ich im Webclient eingebaut habe ^^, mein Updater läuft nun ganz gut. Die Status-Anzeige sieht aber bei großen Files nicht schön aus.
      Vielen Dank für das Tutorial :thumbup:
      : NV Updater | Nvidia Driver Update Tool

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TTX.exe“ ()

      Ich hofe ihr könnt mir bei der Codeanpassung für mein Tol.

      Ich würde gerne die Updatefunktion per ToolStripMenü integrieren:



      Jedoch hab ich nur Grundkenntnisse und weiß nicht genau wie ich den Code anpassen muss. Also eine Statusbar benötige ich nicht, eigentlich nur die reine Updatefunktion.

      Die Programmversion von mir ist aktuiell 1.1.4a

      Die Downloadadresse wäre: beatmasters-winlite-blog.de/wp…ddOn_Downloader_1.1.4a.7z

      Somit also keine EXE-Datei sondern ein 7-Zip Paket.
      Außerdem würde ich wenn ein Update gefunden wurde es gerne so machen, dass automatisch die neue Version heruntergeladen wird man jedoch den Speicherort wählen kann, aber keinen Dateinamen eingeben muss.

      Kann mir da jemand den Code oben anpassen oder Hilfe leisten ?

      Ich danke euch.

      Bisher ist mein Fenster des Programmes mit folgendem Code gefüllt:

      Quellcode

      1. Imports System.Xml
      2. Imports System.ComponentModel
      3. Imports System.Net
      4. Public Class Hauptfenster
      5. Sub New()
      6. ' Dieser Aufruf ist für den Designer erforderlich.
      7. InitializeComponent()
      8. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
      9. Dim fdsr As New System.Windows.Controls.FlowDocumentScrollViewer()
      10. ElementHost1.Child = fdsr
      11. End Sub
      12. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
      13. If MessageBox.Show("Wirklich Beenden ?", "Hinweis", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
      14. Me.Close()
      15. Else
      16. Me.Show()
      17. End If
      18. End Sub
      19. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Über.Click
      20. InfoFenster.Show()
      21. End Sub
      22. Private Sub BeendenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click
      23. If MessageBox.Show("Wirklich Beenden ?", "Hinweis", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
      24. Me.Close()
      25. Else
      26. Me.Show()
      27. End If
      28. End Sub
      29. Private Sub ÜberToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
      30. InfoFenster.Show()
      31. End Sub
      32. Private Sub ListBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox2.SelectedIndexChanged
      33. ListView1.Items.Clear()
      34. For Each ao In DirectCast(ListBox2.SelectedItem, AddonKategorie).Addons
      35. ListView1.Items.Add(New ListViewItem(New String() {ao.Name, ao.Version}))
      36. Next
      37. End Sub
      38. Private Sub AktualisierenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AktualisierenToolStripMenuItem.Click
      39. Dim xml As XElement = XElement.Load("data\Addons.xml")
      40. Dim liste As New BindingList(Of AddonKategorie)()
      41. For Each eintrag In xml.<Kategorie>
      42. liste.Add(AddonKategorie.Einlesen(eintrag))
      43. Next
      44. ListBox2.DataSource = liste
      45. End Sub
      46. Private Sub Hauptfenster_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      47. AktualisierenToolStripMenuItem_Click(Nothing, Nothing)
      48. End Sub
      49. Private Sub WasSindAddonsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles WasSindAddonsToolStripMenuItem.Click
      50. AnleitungFenster.Show()
      51. Me.Hide()
      52. End Sub
      53. Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged
      54. If ListView1.SelectedIndices.Count > 0 Then
      55. DirectCast(ElementHost1.Child, System.Windows.Controls.FlowDocumentScrollViewer).Document =
      56. DirectCast(ListBox2.SelectedItem, AddonKategorie).Addons(ListView1.SelectedIndices(0)).Info
      57. Else
      58. DirectCast(ElementHost1.Child, System.Windows.Controls.FlowDocumentScrollViewer).Document = Nothing
      59. End If
      60. End Sub
      61. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      62. If ListView1.SelectedIndices.Count > 0 Then
      63. Dim link = DirectCast(ListBox2.SelectedItem, AddonKategorie).Addons(ListView1.SelectedIndices(0)).Link
      64. Dim sfd As New SaveFileDialog()
      65. sfd.AutoUpgradeEnabled = True
      66. sfd.FileName = link.Substring(link.LastIndexOf("/") + 1)
      67. sfd.Filter = "Alle Dateien|*.*"
      68. If sfd.ShowDialog() = Windows.Forms.DialogResult.OK Then
      69. Dim f As New DownloadFenster()
      70. AddHandler f.DownloadAbgebrochen, AddressOf DownloadAbgebrochen
      71. AddHandler f.DownloadFertig, AddressOf DownloadFertig
      72. f.Start(link, sfd.FileName)
      73. End If
      74. End If
      75. End Sub
      76. Public Sub DownloadAbgebrochen()
      77. MessageBox.Show("Download vom Benutzer abgebrochen!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
      78. End Sub
      79. Public Sub DownloadFertig()
      80. MessageBox.Show("Download fertig!", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
      81. End Sub
      82. Private Sub AufUpdatesPrüfenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AufUpdatesPrüfenToolStripMenuItem.Click
      83. MessageBox.Show("Funktion noch nicht verfügbar", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
      84. End Sub
      85. Private Sub InstallationToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InstallationToolStripMenuItem.Click
      86. Form4.Show(Me)
      87. Me.Hide()
      88. End Sub
      89. Private Sub KopierenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KopierenToolStripMenuItem.Click
      90. Kopierbereich.Show()
      91. Me.Hide()
      92. End Sub
      93. End Class


      Gruß Mike