kleine Problem mit Pfaden

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von vbExtremeFan.

    kleine Problem mit Pfaden

    Hallo,

    Ich habe son kleines Problem ich möchte einen Updater für mein Spiel machen. Ja der Download funktioniert mein Problem ist das enpacken des ganzen.Die ordner werden erstellt. Aber wenn der Entpackbefeh aufgerufen wird kommt ein fehler !
    Ich verzweifel schon, weil das wahrscheinlich nur pillepalle ist. Hier mal ein teil des Codes :

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports Microsoft.VisualBasic.ApplicationServices
    2. Imports System
    3. Imports System.IO
    4. Public Class GameUpdater
    5. '----------------------Nur Pfade und einmal dateinamen angeben---------------------------------------------------------------------
    6. Dim spieldaten As String = "http://rbe-minecraft.kilu.de/w.zip" ' FTP-Pfad zu dem zip archiv der spieldaten
    7. Dim tmp As String = "C:\Users\Documents\tmp" ' temoräres archiv
    8. Dim game_pfad As String = "C:\UnderTrees\uT\" 'finaler pfad wo die spieldatein hinsollen
    9. Dim progress_zip As Integer ' progreebar value => schleife 0-100-0-...
    10. Dim filename As String = "w.zip" ' name des zip archivs
    11. Dim exename As String = "w.exe" ' name der finalen game exe
    12. Dim username As String ' benutzername (nicht verwendet)
    13. Dim scut_pfad As String = "C:\Users\Public\Desktop\" + filename ' pfad für den shortcut
    14. Dim game_exe_pfad As String = game_pfad & exename 'pfad zum starten der exe
    15. '-------------------------------------------------------------
    16. Private Sub GameUpdater_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    17. System.IO.Directory.CreateDirectory(tmp) 'erstelle neuen ordner UnderTrees
    18. System.IO.Directory.CreateDirectory(game_pfad) 'erstelle neuen ordner Game wo der launcher ist
    19. start() ' download starten
    20. End Sub
    21. Dim wc As System.Net.WebClient
    22. Private Sub start() 'Download starten
    23. wc = New System.Net.WebClient()
    24. AddHandler wc.DownloadProgressChanged, AddressOf OnDownloadProgressChanged
    25. AddHandler wc.DownloadFileCompleted, AddressOf OnFileDownloadCompleted
    26. wc.DownloadFileAsync(New Uri(spieldaten), tmp + filename)
    27. End Sub
    28. Private Sub OnDownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs)
    29. Dim totalSize As String = e.TotalBytesToReceive
    30. Dim downloadedBytes As String = e.BytesReceived
    31. Dim percentage As Integer = e.ProgressPercentage
    32. Label4.Text = downloadedBytes + " / " + totalSize 'passendes label beschriften
    33. ProgressBar1.Maximum = 100 'In der Progressbar den Fortschriff anzeigen lassen in %
    34. ProgressBar1.Value = percentage
    35. End Sub
    36. Private Sub OnFileDownloadCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
    37. If e.Cancelled Then
    38. 'Cancelled
    39. ElseIf Not e.Error Is Nothing Then
    40. 'Beim Download ist ein Fehler aufgetreten
    41. MsgBox("Download konnte nicht abgeschlossen werden", MsgBoxStyle.Critical, "INFORMATION")
    42. My.Settings.dl = False
    43. Me.Close()
    44. Else
    45. entpacken()
    46. 'Download erfolgreich dann entpacken
    47. End If
    48. End Sub
    49. Private Sub Unziped()
    50. MessageBox.Show("Entpacken erfolgreich")
    51. Timer1.Stop()
    52. final_ready()
    53. End Sub
    54. Public Sub entpacken() ' geladenen archiv entpacken
    55. Timer1.Start()
    56. If Directory.Exists(game_pfad) = False Then
    57. Directory.CreateDirectory(game_pfad)
    58. End If
    59. Try
    60. Dim file As String = tmp + filename
    61. Dim cu As New ClassUnzip(file, Path.Combine(Path.GetDirectoryName(file), game_pfad))
    62. AddHandler cu.UnzipFinishd, AddressOf Unziped
    63. cu.UnzipNow()
    64. Catch ex As Exception
    65. Timer1.Stop()
    66. MsgBox("ERROR")
    67. End Try
    68. End Sub
    69. Public Sub final_ready()
    70. scut()
    71. My.Settings.game_pf = game_exe_pfad
    72. My.Settings.dl = True ' = true d.h. spiel muss nicht mehr gedownloadet werden
    73. Form1.start_game() ' greife auf funktion start game zu
    74. Me.Close() 'Downloader + Main-form schliessen
    75. Form1.Close()
    76. End Sub
    77. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    78. ProgressBar2.Maximum = 100 ' maximalen progressbar wert setzten
    79. progress_zip = progress_zip + 1 'counter +1
    80. ProgressBar2.Value = progress_zip
    81. If progress_zip = 100 Then ' bis 100 zählen dann auf 0 setzten
    82. progress_zip = 0
    83. End If
    84. End Sub
    85. Public Sub Filemanager() ' Zip löschen,....
    86. IO.File.Delete(tmp + filename) 'tip löschen
    87. ' IO.Directory.Delete(tmp) 'entpckte datein löschen
    88. End Sub




    vllt findet ja jemand den fehler ;)

    MfG Marcel

    EDIT: noch mehr code ;)
    Entferne mal temporär die Try ... Catches oder stelle das Debugging von behandelten Ausnahmen an, um die genaue Fehlermeldung von VS zu erhalten und poste sie hier.
    PS: Soweit ich weiß laufen die Events des WebClients nicht im UI-Thread, da solltest du mit [Begin]Invoke() arbeiten (siehe etliche Posts im Forum).

    Viele Grüße, Phil.
    Hallo,

    Wenn ich try,.. entferne kommt die meldung msgbox entpacken erfolgreich. ;)


    Dann kommt aber der fehler beim hauptfenster :
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub start_game()
    2. If My.Settings.dl = False Then
    3. GameUpdater.ShowDialog()
    4. Else
    5. ' Shell(My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\" & gameordner & "\" & gamename) ' Spiel starten
    6. Process.Start (My.Settings.game_pf)
    7. Me.Close()
    8. End If
    9. End Sub


    da kommt der fehler :

    Ein Aufrufziel hat einen Ausnahmefehler verursacht.

    vllt. hilft das weiter ;)


    MfG Marcel
    hallo,


    bei GameUpdater.ShowDialog()

    kommt dann halt Ein Aufrufziel hat einen Ausnahmefehler verursacht


    Der code ist ja in der anderen form dersoll ja hald das ganze aufrufen.


    MfG Marcel

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

    Dann hat der GameUpdater einen Fehler in sub New oder in InitializeComponents.
    Musste auf .showDialog einen Haltepunkt setzen, und dann durchsteppen.
    Ah, in GameUpdater.InitializeComponents() musste das DebuggerStepThrough - Attribut entfernen, sonst stept das nicht richtig.
    GameUpdater.InitializeComponents() befindet sich in GameUpdater.designer.vb
    Hallo,

    so ich hab mir mal die designerfile angeschaut und da ist mir was aufgefallen

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Me.Label1 = New System.Windows.Forms.Label()
    2. Me.Label2 = New System.Windows.Forms.Label()
    3. Me.Label4 = New System.Windows.Forms.Label()
    4. Me.Label3 = New System.Windows.Forms.Label()
    5. Me.Label5 = New System.Windows.Forms.Label()
    6. Me.SuspendLayout()
    7. '
    8. 'Timer1
    9. '
    10. '
    11. 'ProgressBar1
    12. '
    13. Me.ProgressBar1.Location = New System.Drawing.Point(215, 6)
    14. Me.ProgressBar1.Name = "ProgressBar1"
    15. Me.ProgressBar1.Size = New System.Drawing.Size(943, 23)
    16. Me.ProgressBar1.TabIndex = 0
    17. '
    18. 'ProgressBar2


    Da wo timer1 steht, steht nicht sdrinne wie zB bei labels oder progressbar,... ist das normal ????
    Und wenn ich gameupdater.showdialog gegen .show ersetzte vershwindet das fenster direkt wieder

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

    YaPh1l schrieb:

    Ich vermute, wie bereits angedeutet, dass es damit zusammenhängt, dass du UI-Zugriffe in den Events des WebClients machst, obwohl diese Events afaik nicht im UI-Thread laufen.

    ich bin jetzt versucht, das zu überprüfen, aber eiglich solltest du es überprüfen.
    Aufgrund einer Vermutung sollte man nicht die Anwendung umbauen.
    An was anderes kanns ja nit liegen !
    das ist eine unerhört gewagte aussage. unerhört unerhört gewagt.
    wennichda recht drüber nachdenke - den Satz sollteste dir merken für die zukunft:
    Kannste immer bringen, wennde in Programmiererkreisen Stürme der Erheiterung auslösen möchtest. :thumbsup:


    in post#12 sage ich aus, bevor man umbaut, solle mans erstmal überprüfen.

    ist sogar sehr einfach zu testen:

    VB.NET-Quellcode

    1. Private Sub OnFileDownloadCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
    2. Msgbox(me.InvokeRequired.Tostring)
    3. If e.Cancelled Then
    4. 'Cancelled
    5. ElseIf Not e.Error Is Nothing Then
    6. 'Beim Download ist ein Fehler aufgetreten
    7. MsgBox("Download konnte nicht abgeschlossen werden", MsgBoxStyle.Critical, "INFORMATION")
    8. My.Settings.dl = False
    9. Me.Close()
    10. Else
    11. entpacken()
    12. 'Download erfolgreich dann entpacken
    13. End If
    14. End Sub

    was gibt die messagebox aus?

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

    So,
    ja hab ich gamcht bei gameUpdater.showdialog() einen haltepunkt gesetzt dann mit einzelschritt durch ich hoffe das war richtig der fehler kam

    Eine Ausnahme (erste Chance) des Typs "System.Net.NetworkInformation.PingException" ist in System.dll aufgetreten.
    Eine Ausnahme (erste Chance) des Typs "System.Net.Sockets.SocketException" ist in System.dll aufgetreten.
    Eine Ausnahme (erste Chance) des Typs "System.Net.NetworkInformation.PingException" ist in System.dll aufgetreten.

    etwas weiter oben hb ich noch das gefunden :

    Einzelschritt: System.Activator.CreateInstance<GameLuncher.My.MyProject.MyForms>-Methode ohne Symbole wird übersprungen.
    Einzelschritt: GameLuncher.My.MyProject.MyForms.GameUpdater.get-Methode ohne Symbole wird übersprungen.
    Eine Ausnahme (erste Chance) des Typs "System.Net.Sockets.SocketException" ist in System.dll aufgetreten.

    und beim initialiesieren das

    Einzelschritt: System.ComponentModel.Container.Container-Methode ohne Symbole wird übersprungen.
    Einzelschritt: System.RuntimeType.CreateInstanceSlow-Methode ohne Symbole wird übersprungen.
    Einzelschritt: System.Activator.CreateInstance<GameLuncher.GameUpdater>-Methode ohne Symbole wird übersprungen.
    Einzelschritt: GameLuncher.My.MyProject.MyForms.GameUpdater.get-Methode ohne Symbole wird übersprungen.


    den ping hab ich rasugenommen !