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
Riesigen Code in Spoiler-Tags gesetzt. ~Thunderbolt
da kommt auch keine fehlermeldung bin schon fast am verzweifeln
VB.NET-Quellcode
- Imports System.IO
- Imports System.Net
- Imports System.Threading
- Public Class Patcher
- ' ############################## Deklarationen ############################## '
- WithEvents CPatcher As New WebClient
- Private FileName As String ' Datei Name (für downloads)
- Private FileBytes As Long ' Datei Größe in Bytes (für Update check)
- Private FileSig As String ' Datei Signatur (für Update check)
- Private SubFolder(1) As String ' Unterordner (n + 1)
- Private scanner As StreamReader ' Zum auslesen der list.txt
- Private Token As Int32 ' Token deklatation
- Private Folder As String ' Folder deklaration
- Private rLine As String ' rLine deklaration
- Private RunBackground As Boolean ' Check für Autostart
- ' ############################## Regionen ############################## '
- #Region "-> Form"
- ' Form Bewegen
- Private ptMouseDownLocation As Point
- Private Sub f_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
- If e.Button = Windows.Forms.MouseButtons.Left Then
- ptMouseDownLocation = e.Location
- End If
- End Sub
- Private Sub f_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
- If e.Button = Windows.Forms.MouseButtons.Left Then
- Me.Location = e.Location - ptMouseDownLocation + Me.Location
- End If
- End Sub
- ' Start Patcher
- Private Sub Patcher_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Init()
- End Sub
- Private Sub Patcher_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
- RunBackground = False
- If Command() <> "" Then
- Dim args As String() = Environment.GetCommandLineArgs()
- If args(1) = "background" Then
- Me.Opacity = 0
- RunBackground = True
- End If
- End If
- If Not RunBackground Then
- Me.Opacity = 100
- End If
- End Sub
- #End Region
- #Region "-> Buttons"
- ' Start Button
- Private Sub Button_Start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Start.Click
- Start()
- End Sub
- Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
- Me.WindowState = FormWindowState.Minimized
- End Sub
- Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
- Me.Close()
- End Sub
- Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
- Process.Start("https://www.google.com/")
- End Sub
- Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
- Process.Start("https://www.google.com/")
- End Sub
- Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click
- Shell("config.exe")
- End Sub
- #End Region
- #Region "-> Patcher"
- Private Sub CPatcher_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles CPatcher.DownloadProgressChanged
- SetProperty(Patch_File_New, "Image", GetProgressImage(e.ProgressPercentage)) ' Downloadfortschritt setzen
- End Sub
- Private Sub Updater_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles Updater.DoWork
- LOG("Patcher::Connecting(" & PATCH_URL & ")") ' Log schreiben
- If Not CheckList("list.txt") Then ' Überprüfen ob list.txt existiert oder Internetverbindung besteht
- LOG("Patcher::CheckList() [Could not find list.txt on Server]") ' Log schreiben
- MsgBox(GetLang(0), MsgBoxStyle.Critical, TITLE) ' Error ausgeben
- Terminate() ' Prozess beenden
- End If
- If File.Exists("list.txt") Then File.Delete("list.txt") ' list.txt löschen falls es existiert
- My.Computer.Network.DownloadFile(PATCH_URL & "list.txt", "list.txt") ' list.txt downloaden
- SetProperty(Patch_Message, "Text", GetLang(7)) ' list.txt check anzeigen
- If Not File.Exists("gzip.exe") Then ' Überprüfen ob gzip.exe nicht existiert
- File.WriteAllBytes("gzip.exe", My.Resources.gzip) ' gzip.exe erstellen
- End If
- If File.Exists("list.txt") Then ' Existiert die list.txt ?
- scanner = New StreamReader("list.txt")
- If "VER: " & VER <> scanner.ReadLine() Then ' überprüfen ob die Version stimmt
- If RunBackground Then ' Wenn es im Background modus
- delay(1000) ' am laufen ist kein Update durchführen
- Terminate() ' und das Programm beenden
- End If
- MsgBox(GetLang(1), MsgBoxStyle.Information, "Update") ' Nachricht ausgeben, dass ein neuer Patch da ist
- If Not CheckList("NewPatcher.exe") Then ' Überprüfen ob NewPatcher.exe existiert oder Internetverbindung besteht
- LOG("Patcher::CheckList() [Could not find NewPatcher.exe on Server]") ' Log schreiben
- MsgBox(GetLang(2), MsgBoxStyle.Critical, TITLE) ' Error ausgeben
- Terminate() ' Prozess beenden
- End If
- End If
- scanner.ReadLine() ' Leerzeile einlesen
- Dim MaxLine As Integer = File.ReadAllLines("list.txt").Length - 2 ' Anzahl Patches
- SetProperty(Patch_Message, "Text", GetLang(5)) ' Update Nachricht anzeigen
- Dim Count As Integer = 0 ' Count deklaration
- Do
- If CPatcher.IsBusy Then ' Findet grad ein Patch/Download statt ?
- SetProperty(Patch_Message, "Text", "Patch " & Count & "/" & MaxLine) ' Patch fortschritt setzen
- Else
- Do
- Extract(FileName, FileBytes, FileSig) ' Datei entpacken
- rLine = Decrypt(scanner.ReadLine()) ' Aktuelle Zeile auslesen
- If Not IsNothing(rLine) Then ' Überürpfen ob rLine einen Inhalt hat
- FileName = GetToken(rLine, 0) ' Datei Namen auslesen
- FileBytes = GetToken(rLine, 1) ' Datei Größe auslesen
- If USE_MD5 Then
- FileSig = GetToken(rLine, 2) ' Datei Signatur
- End If
- Token = 0 ' Token zurücksetzen
- Folder = Nothing ' Folder zurücksetzen
- For i As Integer = 0 To SubFolder.Length - 1
- SubFolder(i) = Nothing ' SubFolder zurücksetzen
- Next i
- If Not IsNothing(rLine) Then
- For i As Int32 = 0 To StrCount(rLine, "\") - 1
- SubFolder(Token) = GetToken(rLine, i, "\")
- Token += 1
- Next
- End If
- If Not IsNothing(SubFolder(0)) Then ' Überprüfen ob SubFolder(0) einen Inhalt hat
- For i As Integer = 0 To SubFolder.Length - 1
- If Not IsNothing(SubFolder(i)) Then ' Überprüfen ob SubFolder(i) einen Inhalt hat
- Folder &= SubFolder(i) & "\" ' Folder füllen mit Informationen
- If Not Directory.Exists(Folder) Then Directory.CreateDirectory(Folder) ' Sollte der Ordner nicht existieren, diesen erstellen
- End If
- Next i
- End If
- If CheckFile(FileName, FileBytes, FileSig) Then ' Überprüfen ob die Datei 1:1 mit dem auf dem Server ist
- Count += 1 ' Count höher setzen
- SetProperty(Patch_Message, "Text", GetLang(10))
- If Count Mod 100 = 0 Then ' Alle 100 durchgänge aktualisieren
- SetProperty(Patch_Message, "Text", "Patch " & Count & "/" & MaxLine) ' Patch fortschritt setzen
- SetProperty(Patch_Total_New, "Image", GetProgressImage(((Count / MaxLine) * 100))) ' Patch fortschritt setzen
- End If
- If Count = MaxLine Then ' Wenn Count gleich MaxLine ist
- Exit Do ' Do Loop verlassen
- End If
- End If
- End If
- Loop While CheckFile(FileName, FileBytes, FileSig) ' Wiederhohlen, bis eine datei zum download ansteht
- If Count < MaxLine Then ' Wenn Coount kleiner als MaxLine ist
- Dim URL As New Uri(PATCH_URL & FileName) ' Patch URL für Updater setzen
- Dim dateiname As String = Path.GetFileName(PATCH_URL & FileName) ' Den dateinamen holen von der Datei die updated werden soll
- CPatcher.DownloadFileAsync(URL, Folder & dateiname) ' Datei update starten
- Count += 1 ' Count höher setzen
- LOG("Patcher::Download(" & Count & ") [" & FileName & "]")
- SetProperty(Patch_Message, "Text", "Patch " & Count & "/" & MaxLine) ' Patch fortschritt setzen
- SetProperty(Patch_Total_New, "Image", GetProgressImage((((Count - 1) / MaxLine) * 100))) ' Patch fortschritt setzen
- Else
- Do While Process.GetProcessesByName("gzip").Length > 0 ' Solange dateien entpackt werden warten.
- SetProperty(Patch_Message, "Text", GetLang(3)) ' Notiz, dass noch entpackt wird.
- Loop
- SetProperty(Button_Start, "Enabled", True) ' Start Button freigeben
- SetProperty(Button_Start, "Image", My.Resources.start) ' Start Button Bild setzen
- SetProperty(Patch_File_New, "Image", GetProgressImage(100)) ' Patch fortschritt auf Maximum setzen
- SetProperty(Patch_Total_New, "Image", GetProgressImage(100)) ' Patch fortschritt auf Maximum setzen
- SetProperty(Patch_Message, "Text", GetLang(4)) ' Notiz, dass das Pathen fertig ist
- If File.Exists("gzip.exe") Then File.Delete("gzip.exe") ' gzip.exe löschen
- If RunBackground Then ' Wenn der Background modus ausgeführt wird
- delay(1000) ' 1000ms warten
- Terminate() ' Nach Background Update beenden
- End If
- Exit Sub ' Patcher Aktionen beenden
- End If
- End If
- Loop
- End If
- End Sub
- #End Region
- End Class
Riesigen Code in Spoiler-Tags gesetzt. ~Thunderbolt
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()