mein Patcher funktioniert aber...

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von felipe12305.

    mein Patcher funktioniert aber...

    Mein Patcher funktzuniert aber es hält dann an ? z.b es sind 305 dateien er hält dann bei 89 an und macht nichts mehr könnt ihr mal den code angucken bitte
    da kommt auch keine fehlermeldung bin schon fast am verzweifeln

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Net
    3. Imports System.Threading
    4. Public Class Patcher
    5. ' ############################## Deklarationen ############################## '
    6. WithEvents CPatcher As New WebClient
    7. Private FileName As String ' Datei Name (für downloads)
    8. Private FileBytes As Long ' Datei Größe in Bytes (für Update check)
    9. Private FileSig As String ' Datei Signatur (für Update check)
    10. Private SubFolder(1) As String ' Unterordner (n + 1)
    11. Private scanner As StreamReader ' Zum auslesen der list.txt
    12. Private Token As Int32 ' Token deklatation
    13. Private Folder As String ' Folder deklaration
    14. Private rLine As String ' rLine deklaration
    15. Private RunBackground As Boolean ' Check für Autostart
    16. ' ############################## Regionen ############################## '
    17. #Region "-> Form"
    18. ' Form Bewegen
    19. Private ptMouseDownLocation As Point
    20. Private Sub f_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
    21. If e.Button = Windows.Forms.MouseButtons.Left Then
    22. ptMouseDownLocation = e.Location
    23. End If
    24. End Sub
    25. Private Sub f_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
    26. If e.Button = Windows.Forms.MouseButtons.Left Then
    27. Me.Location = e.Location - ptMouseDownLocation + Me.Location
    28. End If
    29. End Sub
    30. ' Start Patcher
    31. Private Sub Patcher_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    32. Init()
    33. End Sub
    34. Private Sub Patcher_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
    35. RunBackground = False
    36. If Command() <> "" Then
    37. Dim args As String() = Environment.GetCommandLineArgs()
    38. If args(1) = "background" Then
    39. Me.Opacity = 0
    40. RunBackground = True
    41. End If
    42. End If
    43. If Not RunBackground Then
    44. Me.Opacity = 100
    45. End If
    46. End Sub
    47. #End Region
    48. #Region "-> Buttons"
    49. ' Start Button
    50. Private Sub Button_Start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Start.Click
    51. Start()
    52. End Sub
    53. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    54. Me.WindowState = FormWindowState.Minimized
    55. End Sub
    56. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    57. Me.Close()
    58. End Sub
    59. Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
    60. Process.Start("https://www.google.com/")
    61. End Sub
    62. Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
    63. Process.Start("https://www.google.com/")
    64. End Sub
    65. Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click
    66. Shell("config.exe")
    67. End Sub
    68. #End Region
    69. #Region "-> Patcher"
    70. Private Sub CPatcher_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles CPatcher.DownloadProgressChanged
    71. SetProperty(Patch_File_New, "Image", GetProgressImage(e.ProgressPercentage)) ' Downloadfortschritt setzen
    72. End Sub
    73. Private Sub Updater_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles Updater.DoWork
    74. LOG("Patcher::Connecting(" & PATCH_URL & ")") ' Log schreiben
    75. If Not CheckList("list.txt") Then ' Überprüfen ob list.txt existiert oder Internetverbindung besteht
    76. LOG("Patcher::CheckList() [Could not find list.txt on Server]") ' Log schreiben
    77. MsgBox(GetLang(0), MsgBoxStyle.Critical, TITLE) ' Error ausgeben
    78. Terminate() ' Prozess beenden
    79. End If
    80. If File.Exists("list.txt") Then File.Delete("list.txt") ' list.txt löschen falls es existiert
    81. My.Computer.Network.DownloadFile(PATCH_URL & "list.txt", "list.txt") ' list.txt downloaden
    82. SetProperty(Patch_Message, "Text", GetLang(7)) ' list.txt check anzeigen
    83. If Not File.Exists("gzip.exe") Then ' Überprüfen ob gzip.exe nicht existiert
    84. File.WriteAllBytes("gzip.exe", My.Resources.gzip) ' gzip.exe erstellen
    85. End If
    86. If File.Exists("list.txt") Then ' Existiert die list.txt ?
    87. scanner = New StreamReader("list.txt")
    88. If "VER: " & VER <> scanner.ReadLine() Then ' überprüfen ob die Version stimmt
    89. If RunBackground Then ' Wenn es im Background modus
    90. delay(1000) ' am laufen ist kein Update durchführen
    91. Terminate() ' und das Programm beenden
    92. End If
    93. MsgBox(GetLang(1), MsgBoxStyle.Information, "Update") ' Nachricht ausgeben, dass ein neuer Patch da ist
    94. If Not CheckList("NewPatcher.exe") Then ' Überprüfen ob NewPatcher.exe existiert oder Internetverbindung besteht
    95. LOG("Patcher::CheckList() [Could not find NewPatcher.exe on Server]") ' Log schreiben
    96. MsgBox(GetLang(2), MsgBoxStyle.Critical, TITLE) ' Error ausgeben
    97. Terminate() ' Prozess beenden
    98. End If
    99. End If
    100. scanner.ReadLine() ' Leerzeile einlesen
    101. Dim MaxLine As Integer = File.ReadAllLines("list.txt").Length - 2 ' Anzahl Patches
    102. SetProperty(Patch_Message, "Text", GetLang(5)) ' Update Nachricht anzeigen
    103. Dim Count As Integer = 0 ' Count deklaration
    104. Do
    105. If CPatcher.IsBusy Then ' Findet grad ein Patch/Download statt ?
    106. SetProperty(Patch_Message, "Text", "Patch " & Count & "/" & MaxLine) ' Patch fortschritt setzen
    107. Else
    108. Do
    109. Extract(FileName, FileBytes, FileSig) ' Datei entpacken
    110. rLine = Decrypt(scanner.ReadLine()) ' Aktuelle Zeile auslesen
    111. If Not IsNothing(rLine) Then ' Überürpfen ob rLine einen Inhalt hat
    112. FileName = GetToken(rLine, 0) ' Datei Namen auslesen
    113. FileBytes = GetToken(rLine, 1) ' Datei Größe auslesen
    114. If USE_MD5 Then
    115. FileSig = GetToken(rLine, 2) ' Datei Signatur
    116. End If
    117. Token = 0 ' Token zurücksetzen
    118. Folder = Nothing ' Folder zurücksetzen
    119. For i As Integer = 0 To SubFolder.Length - 1
    120. SubFolder(i) = Nothing ' SubFolder zurücksetzen
    121. Next i
    122. If Not IsNothing(rLine) Then
    123. For i As Int32 = 0 To StrCount(rLine, "\") - 1
    124. SubFolder(Token) = GetToken(rLine, i, "\")
    125. Token += 1
    126. Next
    127. End If
    128. If Not IsNothing(SubFolder(0)) Then ' Überprüfen ob SubFolder(0) einen Inhalt hat
    129. For i As Integer = 0 To SubFolder.Length - 1
    130. If Not IsNothing(SubFolder(i)) Then ' Überprüfen ob SubFolder(i) einen Inhalt hat
    131. Folder &= SubFolder(i) & "\" ' Folder füllen mit Informationen
    132. If Not Directory.Exists(Folder) Then Directory.CreateDirectory(Folder) ' Sollte der Ordner nicht existieren, diesen erstellen
    133. End If
    134. Next i
    135. End If
    136. If CheckFile(FileName, FileBytes, FileSig) Then ' Überprüfen ob die Datei 1:1 mit dem auf dem Server ist
    137. Count += 1 ' Count höher setzen
    138. SetProperty(Patch_Message, "Text", GetLang(10))
    139. If Count Mod 100 = 0 Then ' Alle 100 durchgänge aktualisieren
    140. SetProperty(Patch_Message, "Text", "Patch " & Count & "/" & MaxLine) ' Patch fortschritt setzen
    141. SetProperty(Patch_Total_New, "Image", GetProgressImage(((Count / MaxLine) * 100))) ' Patch fortschritt setzen
    142. End If
    143. If Count = MaxLine Then ' Wenn Count gleich MaxLine ist
    144. Exit Do ' Do Loop verlassen
    145. End If
    146. End If
    147. End If
    148. Loop While CheckFile(FileName, FileBytes, FileSig) ' Wiederhohlen, bis eine datei zum download ansteht
    149. If Count < MaxLine Then ' Wenn Coount kleiner als MaxLine ist
    150. Dim URL As New Uri(PATCH_URL & FileName) ' Patch URL für Updater setzen
    151. Dim dateiname As String = Path.GetFileName(PATCH_URL & FileName) ' Den dateinamen holen von der Datei die updated werden soll
    152. CPatcher.DownloadFileAsync(URL, Folder & dateiname) ' Datei update starten
    153. Count += 1 ' Count höher setzen
    154. LOG("Patcher::Download(" & Count & ") [" & FileName & "]")
    155. SetProperty(Patch_Message, "Text", "Patch " & Count & "/" & MaxLine) ' Patch fortschritt setzen
    156. SetProperty(Patch_Total_New, "Image", GetProgressImage((((Count - 1) / MaxLine) * 100))) ' Patch fortschritt setzen
    157. Else
    158. Do While Process.GetProcessesByName("gzip").Length > 0 ' Solange dateien entpackt werden warten.
    159. SetProperty(Patch_Message, "Text", GetLang(3)) ' Notiz, dass noch entpackt wird.
    160. Loop
    161. SetProperty(Button_Start, "Enabled", True) ' Start Button freigeben
    162. SetProperty(Button_Start, "Image", My.Resources.start) ' Start Button Bild setzen
    163. SetProperty(Patch_File_New, "Image", GetProgressImage(100)) ' Patch fortschritt auf Maximum setzen
    164. SetProperty(Patch_Total_New, "Image", GetProgressImage(100)) ' Patch fortschritt auf Maximum setzen
    165. SetProperty(Patch_Message, "Text", GetLang(4)) ' Notiz, dass das Pathen fertig ist
    166. If File.Exists("gzip.exe") Then File.Delete("gzip.exe") ' gzip.exe löschen
    167. If RunBackground Then ' Wenn der Background modus ausgeführt wird
    168. delay(1000) ' 1000ms warten
    169. Terminate() ' Nach Background Update beenden
    170. End If
    171. Exit Sub ' Patcher Aktionen beenden
    172. End If
    173. End If
    174. Loop
    175. End If
    176. End Sub
    177. #End Region
    178. End Class


    Riesigen Code in Spoiler-Tags gesetzt. ~Thunderbolt

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

    Moin,

    da muss ich Dir erstmal das an den Kopf werfen:
    Updater - Warum sollte man eigene Updater vermeiden?

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Du wolltest doch Hilfe?! Dazu gehört auch dieser Teil, verstehe nicht, was Du dann mit "ich will das nicht" meinst.
    Ist u. a. eine wichtige Sache.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:

    Du wolltest doch Hilfe?! Dazu gehört auch dieser Teil, verstehe nicht, was Du dann mit "ich will das nicht" meinst.
    Ist u. a. eine wichtige Sache.

    Grüße


    Er prüft doch Signaturen wenn du dir mal den Code 10 Sekunden angeschaut hättest ohne direkt zu urteilen wüsstest du das auch. Außerdem ist er daran jetzt nicht weiter interessiert also ist es doch egal.
    Ich weiß du kommst jetzt wieder dass das nicht sicher ist wie er es macht oder das die Signaturprüfung für etwas anderes gedacht ist aber ist doch egal.
    Ou - sorry, das hatte ich gar nicht gesehen, vmtl, weil die Funktion nur aufgerufen wird.
    Edit: @Markus Jacobs Bin grade auf dem PC des TE und das ist keine Signierung, sondern ein Integritätscheck, also ist der Link von mir doch gültig. :P

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

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

    felipe12305 schrieb:

    Versuchs mal im Einzelschritt zu debuggen und dann die Variablen durchzugehen.. vllt. Gibts nen Fehler der intern auftritt..
    btw. Zieemlich viele Verschachtelungen.. :D

    LG & viel Glück


    Da Steht also wenn ich einzel schritt debugge mache kommt der Fehler :

    patcher.exe!patcher.Patcher.New()Zeile 7
    in klammern [Externer Code]

    und bei der auto box steht :

    Name Wert Typ

    Patcher Nothing System.Net.Webclient


    das ganze leuchtet gelb mit einem pfeil auf die variable
    Genau, ist einfach ein Hash, um das zu prüfen. Also sogar nicht mal Integritätscheck, sah nur vorhin so aus, sondern einfach zum Suchen von geänderten Dateien. ;)
    Aber konnte ja niemand wissen und es ist ja auch ein ​FileSig vorhanden, also niemand kann Dir Schuld geben.

    Zum Thema: Habe dem TE den Code ein wenig verbessert und geholfen, kann sein, dass er sich nochmal meldet.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Bullrihgter Das bedeutet das deine Patcher-Variable leer ist, also ist da i-was schiefgelaufen. Versuch nach den jew. Methoden etwas im Debug oder der Console auszugeben mit Debug.Print("") oder Console.WriteLine(""), vllt nach dem Schema "Funktion 'x' ausgeführt." wobei x naja weisst schon xD

    LG