7-Zip packt Ordner der ausführenden .exe statt angegebener Datei

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    7-Zip packt Ordner der ausführenden .exe statt angegebener Datei

    Hallo zusammen,

    seit gestern kämpfe ich mit dem Problem dass 7-Zip, als Prozess aufgerufen, nicht die Datei packt welche ich dem Prozess mitteile. Statt desen packt es den Inhalt des Debug Ordners in dem meine Test.exe liegt. Bzw. wenn ich das Ganze als AddIn .dll erzeuge packt es den Ordnerinhalt der im Programm (CAD) geöffneten Datei.

    Das heißt das erstellen des Archivs im Zielordner funktioniert, allerdings ist der Inhalt ein vollständig anderer; was irgendwie ungünstig ist.

    Ich habe die Übergabe der ProzessStartInfo auf verschiedene Art variiert aber das Ergebnis ist immer das Gleiche.

    Vielleicht kann sich den folgenden Code mal jemand anschauen und hat eine Idee wo mein Fehler liegt.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Const _PathZipProgram As String = "C:\program files\7-Zip\"
    2. Public Sub Sichern()
    3. Dim sSourcePath, sSourceFile01, sSourceFile02, sTargetPath, sTargetFileName01, sTargetFileName02, strDate As String
    4. sSourcePath = "C:\TempTest\"
    5. sSourceFile01 = "Datei_01.txt"
    6. sSourceFile02 = "Ordner_01"
    7. sTargetPath = "C:\TempTestEntpackt\"
    8. strDate = Format(Now, "yyyy-mm-dd h-mm-ss")
    9. sTargetFileName01 = "Datei" & strDate
    10. sTargetFileName02 = "Ordner" & strDate
    11. Call SevenZipZip(sSourcePath, sSourceFile01, sTargetPath, sTargetFileName01)
    12. Call SevenZipZip(sSourcePath, sSourceFile02, sTargetPath, sTargetFileName02)
    13. End Sub
    14. Private Sub SevenZipZip(sSourcePath As String, sSourceFile As String, sTargetPath As String, sTargetFileName As String)
    15. Dim FullFileNameZipFile As String
    16. FullFileNameZipFile = sTargetPath & sTargetFileName & ".7z"
    17. Dim FullFileNameSourceFile As String
    18. FullFileNameSourceFile = sSourcePath & sSourceFile
    19. Dim SevenZip As New Process
    20. SevenZip.StartInfo.FileName = _PathZipProgram & "7z.exe"
    21. SevenZip.StartInfo.Arguments = String.Format("a -p4711 {0}{1}{0} -o{0}{2}{0}", Chr(34), FullFileNameZipFile, FullFileNameSourceFile)
    22. SevenZip.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    23. SevenZip.Start()
    24. SevenZip.WaitForExit()
    25. End Sub
    26. Private Sub SevenZipUnzip(SourceFile As String, TargetFolder As String)
    27. Dim SevenZip As New Process
    28. SevenZip.StartInfo.FileName = _PathZipProgram & "7z.exe"
    29. SevenZip.StartInfo.Arguments = String.Format("x -aoa -r -p4711 {0}{1}{0} -o{0}{2}{0} *.*", Chr(34), SourceFile, TargetFolder)
    30. SevenZip.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    31. SevenZip.Start()
    32. SevenZip.WaitForExit()
    33. End Sub



    Entpacken funktioniert wie gewünscht.

    Führe ich den obigen Code in VBA angepasst auf ShellAndWait aus funktioniert es problemlos.

    Vielen Dank für die Hilfe

    Grüße 3D_CAD
    @3D_CAD Welche Syntax erwartet 7-Zip von Dir?
    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!
    7-Zip erwartet die Strings für Target und Source innerhalb einfacher Apostrophe

    Also: "C:\TempTestEntpackt\Datei_01.7z" "C:\TempTest\Datei_01.txt"

    Ich erhalte aber doppelte Apostrophe
    ""C:\TempTestEntpackt\Datei_01.7z"" ""C:\TempTest\Datei_01.txt""

    Edit:
    In einer batch funktioniert folgendes:

    Quellcode

    1. cd C:\program files\7-Zip\
    2. 7z.exe a -r -p4711 "C:\TempTestGepackt\Datei_01.7z" "C:\TempTest\Datei_01.txt"


    Das entspricht auch dem ShellString unter VBA

    Für die VB.net Umsetzung hatte ich mich hieran orientiert:
    Dateien mit 7-Zip packen / entpacken

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

    3D_CAD schrieb:

    Ich erhalte aber doppelte Apostrophe
    Das ist in VB die Syntax für Apostrophen innerhalb eines Strings. Es müsste dann so aussehen:
    """C:\TempTestEntpackt\Datei_01.7z"" ""C:\TempTest\Datei_01.txt"""
    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!
    Dummer Fehler von mir, hat mich nunmehr einige Stunden gekostet:

    VB.NET-Quellcode

    1. SevenZip.StartInfo.Arguments = String.Format("a -p4711 {0}{1}{0} -o{0}{2}{0}", Chr(34), FullFileNameZipFile, FullFileNameSourceFile)


    das -o ist zuviel ist aus dem entpacken mit rein gerutscht :cursing:

    Danke trotzdem für die Hilfe

    Wünsche eine schönes WE
    @3D_CAD Das mit dem "" musst Du noch verstehen:

    VB.NET-Quellcode

    1. SevenZip.StartInfo.Arguments = String.Format("a -p4711 ""{0}"" -o""{1}""", FullFileNameZipFile, FullFileNameSourceFile)
    Teste einfach mal dies:

    VB.NET-Quellcode

    1. MessageBox.Show("""")
    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!
    Ich muss noch so einiges mehr verstehen. Leider habe ich momentan nicht die Zeit mich ganz grundlegend mit allem zu beschäftigen (auch wenn es mir bereits viel Zeit gespart hätte).

    Eigentlich dachte ich ja auch ich hätte es gerafft, habe mich aber solange an der falschen Stelle um das Problem gedreht, dass ich den eigentlichen Fehler übersehen habe.
    @3D_CAD Falls Du wieder mal einen Prozess starten willst, probiere das zunächst miteiner Batch-Datei.
    Wenn die läuft und Dein Programm nicht, kannst Du die Batch posten und Dir kann schnell geholfen werden.
    Ich hatte zunächst den Verdacht, dass Du das Arbeitsverzeichnis nicht gesetzt hättest, das war es aber nicht.
    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!