Selbstentpackendes 7z Archiv entpacken

  • Hallo,

    Ich habe ein selbstentpackendes 7z Archiv, und möchte dieses nun mit Autoit entpacken. Ich kann die .exe Datei zwar öffnen mit:

    [autoit]

    Local $file = 'Mein selbstentpackendes 7z Archiv'
    Run($file)

    [/autoit]

    Bekomme dann aber das Fenster wo ich auswählen muss wo ich es hin haben will. Nun meine Frage, wie kann ich der .exe Datei (dem Selbstentpackendes 7z Archiv) sagen wo ich es hinhaben will??

    Vielen Dank fürs Lesen und Beantworten!

    Einmal editiert, zuletzt von kloklo (22. September 2009 um 21:16)

  • Könntest du das vill. etwas genauer erklären?

    Gab es da nichtmal sowas, dass man .exe Datein mit Befehlen aufrufen kann?

    Vielen Dank

  • Ob Du den Pfad zum Entpacken als Paramter angeben kannst, musst Du in der Dokumentation von 7z nachlesen, das weiß ich nicht.

    Ich habe vor einiger Zeit mal eine Funktion geschrieben um AutoItSfx zu entpacken. Das sollte dir weiterhelfen.

    Spoiler anzeigen
    [autoit]

    Func UnpackAutoItSfx ($szAutoItSfx, $szDestDir) ; OK

    [/autoit] [autoit][/autoit] [autoit]

    If Not FileExists ($szAutoItSfx) Then Return SetError (1, 0, '')
    If Not FileExists ($szDestDir) Then DirCreate ($szDestDir)
    ; AutoIt v3 entpacken.
    Local $szWinTitle, $pidSFX, $hSearch, $szFile
    $szWinTitle = 'WinRAR self-extracting archive'
    $pidSFX = Run ($szAutoItSfx)

    If (WinWait ($szWinTitle, '', 10)) Then

    BlockInput (1)
    Sleep (100)

    If (ControlSetText ($szWinTitle, '', 1001, $szDestDir)) Then

    Sleep (100)

    If (ControlClick ($szWinTitle, '', 1)) Then

    BlockInput (0)
    ProcessWaitClose ($pidSFX)
    Sleep (100)
    $hSearch = FileFindFirstFile ($szDestDir & '\*')

    If ($hSearch = -1) Then

    FileClose ($hSearch)
    Return SetError (1, 0, '')
    Else
    While (True)

    $szFile = FileFindNextFile ($hSearch)
    If (@error) Then
    ExitLoop
    ElseIf (FileExists ($szDestDir & '\' & $szFile & '\AutoIt3.exe')) Then
    FileClose ($hSearch)
    Return $szDestDir & '\' & $szFile
    Else
    FileClose ($hSearch)
    Return SetError (1, 0, '')
    EndIf
    WEnd
    EndIf
    EndIf
    Else
    BlockInput (0)
    Return SetError (1, 0, '')
    EndIf
    Else
    BlockInput (0)
    Return SetError (1, 0, '')
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit]

    Gruß
    Greenhorn


  • Hmm,... Ok, danke erstmal habs mitlerweile auch mal so probiert:

    [autoit]

    Run("Mein Archiv","Soll hierhin",@SW_HIDE)
    ControlSend ( "7-Zip self-extracting archive", "", 1, "{ENTER}")

    [/autoit]

    Aber trotzdem Vielen Dank!


    Weiß jemand ob man das über Paramente machen kann?

  • Ja kann man geh in deinen Ordner in den du 7zip installiert hast und dann auf öffne 7zip.chm datei. Unter command line version steht alles.

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Hallo, hat nicht wirklich geholfen RR04.

    @ FireFlyer: ich habe mir das mal angeguckt und habs dann so versucht:

    [autoit]

    Run("D:\test.exe 7z e test.exe")

    [/autoit]

    geht aber nicht, könntest du mir helfen?

  • versuch es mal mit damit, hab ich bei Google gefunden (hättest Du bestimmt auch gefunden ...)
    http://www.ojaehrling.de/Eisfair-Pakete/7zip/

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Da war ich schon, hilft aber leider nicht viel weiter.
    Ich will ja das Selbstentpackende Archiv entpacken also ein 7-Zip Archiv als .exe wofür ich 7-Zip (meiner Ansicht nach) nicht installiert haben muss.

    Aber ich denke mal ich mach das dann über:

    [autoit]

    Run("D:\7zipArchiv.exe","D:\",@SW_HIDE)
    ControlSend ( "7-Zip self-extracting archive", "", 1, "{ENTER}")

    [/autoit]


    Aber vielen Dank!

  • Also ich habs so gelöst

    [autoit]

    EnvSet("path", (EnvGet("path") &";" & @ProgramFilesDir & "\7-Zip;")) ;7z und 7za nur über Path Aufruf möglich
    $errorlevel = RunWait(@ComSpec & ' /c 7z.exe x "'& @ScriptDir & '\settings.7z" -y -o"' & @TempDir & '\"')

    [/autoit]

    ----------------------------------------------------------------------------------------------------------------------
    Früher musste man Drachen töten und konnte die Jungfrau heiraten.
    Heute gibt es keine Jungfrauen mehr, man muss den Drachen heiraten!

  • Hi!

    Eigendlich geht es schon mit Commandline Angaben.

    [autoit]


    Run('temp.exe x -o"C:\temp\temp" -y')

    [/autoit]


    Wichtig ist das kein Abstand zwischen -o und der Pfadangabe ist!

    LG
    Concara

    Edit:
    Was ich noch vergessen habe zu Sagen.
    Fehlende Ordner in der Angabe, werden von 7zip, sofern die rechte des Benutzers ausreichen, selbständig erstellt.
    Heißt wenn der Ordner c:\temp\blabla angegeben wird und z.B.: blabla noch nicht vorhanden ist wird dieser automatisch erstellt.

    If not :?: then ?( else :thumbup:

    2 Mal editiert, zuletzt von Concara (23. September 2009 um 12:24)

  • Hey! :)


    Vielen Dank Concara, so geht es endlich! :)

    Für deinen vorschlag XTC99 muss ich, soweit ich sehe, 7-Zip installiert haben, welches ich aber durch das selbstentpackende Archiv umgehen möchte. Trotzdem Danke! Auch allen anderen die mir geholfen haben!

    LG

  • wenn man die 7z verwendet (als commandline) müssen nur 2 dateien vorhanden sein
    1. 7z.exe
    2. 7z.dll ((heisst die so? naja steht auch in der hilfe)

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D