Fehler beim Ausführen meiner EXE

  • VB.NET
  • .NET (FX) 4.0

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von HummelPlays.

    Fehler beim Ausführen meiner EXE

    Hallo, ich versuche z.Z. eine EXE zu programmieren die eine ZIP runterlädt und die dann diese ZIP entpackt. Hier ist mein Jetiger Code:

    VB.NET-Quellcode

    1. Imports Shell32
    2. Imports System
    3. Imports System.IO
    4. Public Class Form1
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    6. Dim Benutzername As String = My.User.Name.ToString
    7. Dim WinPfad As String = Environ("WinDir")
    8. My.Computer.Network.DownloadFile("https://www.dropbox.com/s/svggzl0pzh4km03/Audio.zip", WinPfad + "Users\" + Benutzername + "\Documents\Audio\")
    9. Using ofd As New OpenFileDialog
    10. ofd.Filter = "ZipFile|*.zip"
    11. If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
    12. Dim file As String = ofd.FileName
    13. Dim cu As New ClassUnzip(file, Path.Combine(WinPfad + "Users\" + Benutzername + "\Documents\Audio\", "Audio.zip"))
    14. AddHandler cu.UnzipFinishd, AddressOf Unziped
    15. cu.UnzipNow()
    16. End If
    17. End Using
    18. Dim p = New Process()
    19. p.StartInfo.FileName = WinPfad + "Users\" + Benutzername + "\Documents\Audio\Audio.exe"
    20. p.Start()
    21. Me.Close()
    22. End Sub
    23. Private Sub Unziped()
    24. End Sub
    25. End Class
    26. Public Class ClassUnzip
    27. Private _file As String
    28. Private _folder As String
    29. Private _towhere As String
    30. Private _shell As Shell32.IShellDispatch2
    31. ''' <summary>Event welches vor dem Entpacken (Unzip) ausgeführt wird.</summary>
    32. ''' <remarks></remarks>
    33. Public Event Unzipstart()
    34. ''' <summary>Event welches nach dem Entpacken (Unzip) ausgeführt wird.</summary>
    35. ''' <remarks></remarks>
    36. Public Event UnzipFinishd()
    37. ''' <summary>Neue Instanz der ClassUnzip Klasse.</summary>
    38. ''' <param name="file">Datei welche entpackt werden soll.</param>
    39. ''' <param name="towhere">Zielordner.</param>
    40. ''' <remarks></remarks>
    41. Public Sub New(ByVal file As String, ByVal towhere As String)
    42. _file = file
    43. _towhere = towhere
    44. _folder = Path.Combine(Path.GetDirectoryName(_file), _towhere)
    45. _shell = CreateObject("Shell.Application")
    46. End Sub
    47. ''' <summary>Das Entpacken (Unzip) wird ausgeführt.</summary>
    48. ''' <returns></returns>
    49. ''' <remarks></remarks>
    50. Public Function UnzipNow() As Boolean
    51. 'prüfen ob der ordner existiert
    52. If Directory.Exists(_folder) = False Then
    53. Directory.CreateDirectory(_folder)
    54. End If
    55. 'event für start feuern
    56. RaiseEvent Unzipstart()
    57. 'entpacken
    58. Dim temp As Shell32.Folder = _shell.NameSpace((_folder))
    59. If temp IsNot Nothing Then
    60. temp.CopyHere(_shell.NameSpace((_file)).Items)
    61. End If
    62. 'event für ende feuern
    63. RaiseEvent UnzipFinishd()
    64. 'rückgabe wert setzen
    65. Return True
    66. End Function
    67. ''' <summary>Gibt den Namen der gepackten Datei zurück, oder setzt diesen.</summary>
    68. ''' <value></value>
    69. ''' <returns></returns>
    70. ''' <remarks></remarks>
    71. Public Property UnZipFile() As String
    72. Get
    73. Return _file
    74. End Get
    75. Set(ByVal value As String)
    76. _file = value
    77. End Set
    78. End Property
    79. ''' <summary>Gibt den Zielort (entpacken) zurück, oder setzt diesen.</summary>
    80. ''' <value></value>
    81. ''' <returns></returns>
    82. ''' <remarks></remarks>
    83. Public Property UnzipTo() As String
    84. Get
    85. Return _towhere
    86. End Get
    87. Set(ByVal value As String)
    88. _towhere = value
    89. End Set
    90. End Property
    91. End Class

    Und das ist die Fehlermeldung:

    VB.NET-Quellcode

    1. Informationen über das Aufrufen von JIT-Debuggen
    2. anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.
    3. ************** Ausnahmetext **************
    4. System.ArgumentException: Der angegebene Pfad endet mit einem Verzeichnistrennzeichen.
    5. Parametername: destinationFileName
    6. bei Microsoft.VisualBasic.FileIO.FileSystem.CheckFilePathTrailingSeparator(String path, String paramName)
    7. bei Microsoft.VisualBasic.Devices.Network.DownloadFile(Uri address, String destinationFileName, ICredentials networkCredentials, Boolean showUI, Int32 connectionTimeout, Boolean overwrite, UICancelOption onUserCancel)
    8. bei Microsoft.VisualBasic.Devices.Network.DownloadFile(String address, String destinationFileName)
    9. bei Minecraft_Server_Anwedung.Form1.Form1_Load(Object sender, EventArgs e)
    10. bei System.EventHandler.Invoke(Object sender, EventArgs e)
    11. bei System.Windows.Forms.Form.OnLoad(EventArgs e)
    12. bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    13. bei System.Windows.Forms.Control.CreateControl()
    14. bei System.Windows.Forms.Control.WmShowWindow(Message& m)
    15. bei System.Windows.Forms.Control.WndProc(Message& m)
    16. bei System.Windows.Forms.Form.WndProc(Message& m)
    17. bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    So jetzt sieht es mittlerweile so bei mir aus:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    2. Dim Benutzername As String = My.User.Name.ToString
    3. Dim WinPfad As String = Environ("WinDir")
    4. Me.Hide()
    5. My.Computer.Network.DownloadFile("https://dl.dropboxusercontent.com/s/svggzl0pzh4km03/Audio.zip?dl=1&token_hash=AAFaUhfIUC7WYcnX28q4_rQJT0n7s_ef6EGRbJ6bBfrbCg&expiry=1400921402", Path.Combine(WinPfad + "Users\" + Benutzername + "\Documents\Audio\", "Audio.zip"))
    6. Using ofd As New OpenFileDialog
    7. ofd.Filter = "ZipFile|*.zip"
    8. If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
    9. Dim file As String = ofd.FileName
    10. Dim cu As New ClassUnzip(file, Path.Combine(WinPfad + "Users\" + Benutzername + "\Documents\Audio\", "Audio.zip"))
    11. AddHandler cu.UnzipFinishd, AddressOf Unziped
    12. cu.UnzipNow()
    13. End If
    14. End Using
    15. Dim p = New Process()
    16. p.StartInfo.FileName = WinPfad + "Users\" + Benutzername + "\Documents\Audio\Audio.exe"
    17. p.StartInfo.CreateNoWindow = True
    18. p.Start()
    19. Me.Close()
    20. End Sub


    Nur jetzt zeigt er mir ein Öffnen Fenster an, ich möchte aber das er es automatisch macht, geht das?

    MfG,
    Daniel
    Ausserdem wenn ich die Audio.zip auswähle und auf Öffnen klicke kommt wieder ein Fehler:

    VB.NET-Quellcode

    1. ************** Ausnahmetext **************
    2. System.IO.IOException: "S:\WindowsUsers\Daniel\Humm3lPlays\Documents\Audio\Audio.zip" kann nicht erstellt werden, da eine Datei oder ein Verzeichnis mit demselben Namen bereits vorhanden ist.
    3. bei System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
    4. bei System.IO.Directory.InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj, Boolean checkHost)
    5. bei System.IO.Directory.InternalCreateDirectoryHelper(String path, Boolean checkHost)
    6. bei Minecraft_Server_Anwedung.ClassUnzip.UnzipNow()
    7. bei Minecraft_Server_Anwedung.Form1.Form1_Load(Object sender, EventArgs e)
    8. bei System.EventHandler.Invoke(Object sender, EventArgs e)
    9. bei System.Windows.Forms.Form.OnLoad(EventArgs e)
    10. bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    11. bei System.Windows.Forms.Control.CreateControl()
    12. bei System.Windows.Forms.Control.WmShowWindow(Message& m)
    13. bei System.Windows.Forms.Control.WndProc(Message& m)
    14. bei System.Windows.Forms.Form.WndProc(Message& m)
    15. bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    Aber ich möchte die Datei ja nicht erstellen sondern ich möchte sie entpacken.

    MfG,
    Daniel
    ah okay.
    Zu deine ersten Frage:
    Klar kommt der OpenFileDialog! Du rufst ihn ja auf mithilfe des OpenFileDialogs auf!
    Was genau beabsichtigst du mit deiner Anwendung? Wenn sie gestartet wird, soll eine Zip-Datei heruntergeladen werden und aus dieser ZIP dann eine EXE ausgeführt werden?

    Du solltest also den OpenFileDialog entfernen, da du ihn gar nicht brauchst, du weist ja wo die Datei liegt!
    Du brauchst also nur die Zeile, der Rest des OFD´s kann weg.

    VB.NET-Quellcode

    1. Dim cu As New ClassUnzip(file, Path.Combine(WinPfad + "Users\" + Benutzername + "\Documents\Audio\", "Audio.zip"))
    2. AddHandler cu.UnzipFinishd, AddressOf Unziped
    3. cu.UnzipNow()


    Zu der Klasse:
    1.) Bitte formatiere das richtig, von dem ganzen Rot bekommt man ja Augenkrebs ;)
    2.) Von wo hast du die Klasse? Dort vielleicht nochmal nachfragen, ich weiß nicht, wie die Funktionieren soll.
    Liebe Grüße
    sothere
    Da gibt es wohl mehr als nur ein Problem.
    Zum Entpacken: Dein Post hast du deklariert mit .Net4.0 und nicht mit .Net4.5. In 4.5 (Framework) ist eine Zip Klasse enthalten die Du nutzen kannst.
    Zum Downloaden aus Dropbox: Ich weiß nicht, ob es überhaupt so funktioniert, wenn die Freigabe nicht public ist. Ich habe mal mit meiner Dropbox getestet und festgestellt, dass bei beiden Downloadmethoden (DownloadFile und Async) nur angeblich die gewünschte Datei erhalte. In Wahrheit ist es kein Zip-Archiv wie vermutet sondern eine HTML-Datei. Ein weiteres Problem bei Deiner Methode ist dann noch, dass Du auf bereits vorhandene Dateien mit gleichen Namen reagieren musst, sonst gibt es eine Exception.
    Zumindest bei mir geht der Download aus Dropbox also nicht, da hatte ich auch mal etwas zu gelesen.
    Habe jetzt diesen Code benutzt:

    VB.NET-Quellcode

    1. Using zip As ZipFile = ZipFile.Read(Path.Combine(WinPfad + "Users\" + Benutzername + "\Documents\Audio\", "Audio.zip"))
    2. Dim Entry As ZipEntry
    3. For Each Entry In zip
    4. Entry.Extract(WinPfad + "Users\" + Benutzername + "\Documents\Audio\", ExtractExistingFileAction.OverwriteSilently)
    5. Next
    6. End Using

    Und diese DDL: dropbox.com/s/431n62djx1rla1c/Ionic.Zip.dll

    So nun bekomme ich aber bei denn Process ein Problem: System.ComponentModel.Win32Exception: Das System kann die angegebene Datei nicht finden

    VB.NET-Quellcode

    1. bei System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
    2. bei Audio.Form1.Form1_Load(Object sender, EventArgs e)
    3. bei System.EventHandler.Invoke(Object sender, EventArgs e)
    4. bei System.Windows.Forms.Form.OnLoad(EventArgs e)
    5. bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    6. bei System.Windows.Forms.Control.CreateControl()
    7. bei System.Windows.Forms.Control.WmShowWindow(Message& m)
    8. bei System.Windows.Forms.Control.WndProc(Message& m)
    9. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    10. bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    Obwohl die Datei vorhanden ist.

    VB.NET-Quellcode

    1. Dim p = New Process()
    2. p.StartInfo.FileName = Path.Combine(WinPfad + "Users\" + Benutzername + "\Documents\Audio\", "Audio.exe")
    3. p.Start()


    MfG,
    Daniel

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

    HummelPlays schrieb:

    Das System kann die angegebene Datei nicht finden
    Dann ist sie offensichtlich nicht da.
    Stell den Pfad in einer String-Variable bereit und sieh sie Dir an, bevor Du sie als ZIP-Argument verwendest.
    Setz einen Haltepunkt drauf.
    Hast Du im Pfad zwischen letztem Verzeichnis und Datei ein "\" drinne?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Erledigt

    Okay, doch nicht. Jetzt zeigt er mir an das es ein Virus ist. (Avira)
    Folgender Code ist wahrscheinlich der Auslöser:

    VB.NET-Quellcode

    1. Namespace My
    2. Partial Friend Class MyApplication
    3. Private WithEvents MyDomain As AppDomain = AppDomain.CurrentDomain
    4. Private Function MyDomain_AssemblyResolve(ByVal sender As Object, ByVal args As System.ResolveEventArgs) As System.Reflection.Assembly Handles MyDomain.AssemblyResolve
    5. If args.Name.Contains("Ionic.Zip") Then
    6. Return System.Reflection.Assembly.Load(My.Resources.Ionic)
    7. ElseIf args.Name.Contains("Ionic.Zip") Then
    8. Return System.Reflection.Assembly.Load(My.Resources.Ionic)
    9. Else
    10. Return Nothing
    11. End If
    12. End Function
    13. End Class
    14. End Namespace

    Ich habe es auch noch in die Resourcen kopiert (DIe Datei(Ionic.dll)).. Kann mir da jemand helfen?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „HummelPlays“ ()