dll dateien in exe einbinden

  • Hallo

    Ich hab ein Programm geschrieben das automatisch das jeweilige verzeichnis mit winzip packt. Um Winzip zu benutzen hab ich mit :

    [autoit]

    $hPluginDll = PluginOpen("C:\Programme\AutoIt3\Eingefügte_Funktionen\Au3Zip\bin\Au3Zipc.dll") ; Adresse der externe Programmbibliothek WinZip-Plugin dll

    [/autoit]


    ein winzip Plugin eingefügt, lief auch alles wunderbar, das Problem ist nur wenn ich die exe(mein ausführbares Programm) mit auf einen anderen rechner nehme, ist die ddl datei nicht da. kann ich die ihrgendwie ins programm(die .exe) integrieren?


    Hier das ganze programm:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.10.0
    Author: FrankWilmes

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

    Script Function:
    Template AutoIt script.

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

    die WinZip Funktion dieses Skriptes wird über eine externe Benutzer Funktion
    erreicht die kein Teil der AutoIt Standardbiblioteken ist
    Ein Downloadlink und eine Anleitung findet man hier:
    http://www.autoitscript.com/forum/index.ph…&hl=unzip+files

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

    #ce ----------------------------------------------------------------------------

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

    #include <_ZipPlugin.au3> ;Include für WinZip Funktionen
    #include <GUIConstants.au3>

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

    ;Bitte warten Fenster wenn Datei gepackt wird
    $Form1 = GUICreate("Bitte warten", 350, 55, -1, -1)
    $Label1 = GUICtrlCreateLabel("Bitte warten, Dateien werden gepackt", 40, 16, 263, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")

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

    $box = MsgBox (1,"MakePublic","MakePublic wird gestartet")
    If $box = 2 Then Exit ;cancel oder x gedrückt
    $Pfad = @ScriptDir
    FileDelete ($Pfad & "\bin\release\" & "*vshost*")

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

    ;;;;;;;; Release Ordner anlegen ;;;;;;;;;;;;
    $PfadReleasealt = ($Pfad & "\bin\Release")
    $box = MsgBox ( 3, "Releas", "Sollen die Programmdateien veröffentlicht werden?"); Abfrage (Ja Nein Abbrechen) ob Releaseordner angelegt werden soll
    If $box = 2 Then Exit ;cancel oder x gedrückt
    If $box =6 then Release($PfadReleasealt) ; Ja gedrückt Release Ordner wird angelegt

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

    ;;;;;; Zip-Datei erstellen ;;;;;;;;;;;;;
    $box = MsgBox ( 1, "Zip", "Sollen die Source Dateien gepackt werden?"); Abfrage (Ja Nein Abbrechen) ob Source Dateien werden soll
    If $box =2 then exit ;cancel oder x gedrückt
    $searchexe = FileFindFirstFile($PfadReleasealt & "\*.exe") ;Suche Exe Datei im Realeae Ordner
    If $searchexe = -1 Then MsgBox(0, "Error", "keine exe gefunden")
    if $searchexe =1 then
    $exe = FileFindNextFile($searchexe) ;Gibt den Namen der 1. gefundenen exe-Dateien zurück
    ;$exeb = FileFindNextFile($searchexe) ;Gibt den Namen der 2. gefundenen exe-Dateien zurück
    endif
    FileClose($searchexe)

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

    ;If $exea <> "Update.exe" Then $exe = $exea
    ;If $exeb <>"Update.exe" Then $exe = $exeb

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

    $Version = FileGetVersion ($PfadReleasealt & "\" &$exe) ;Version der EXE
    $exeSplit = Stringsplit($exe, ".exe",1); Trennt das .exe von der exe Datei
    $zipdateiname = ($exeSplit[1] & "_" & $Version) ;Name der Zip-Datei wird bestimmt

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

    ; Plugin für WinZip öffnen.
    $hPluginDll = PluginOpen("C:\Programme\AutoIt3\Eingefügte_Funktionen\Au3Zip\bin\Au3Zipc.dll") ; Adresse der externe Programmbibliothek WinZip-Plugin dll

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

    $Zipdatei = InputBox ( "Datei speichern unter:", "Bitte geben sie den Dateinamen an", "c:\public\source\" & $zipdateiname& ".zip", "", 350,125)
    If @error = 1 then exit ; Cancel gedrückt
    $ZipPfad = Stringsplit($Zipdatei,$zipdateiname& ".zip",1) ; Trennt zipdateiname.zib vom eingelesenen Pfad, wird benötigt um einen variablen Pfad anzulegen
    DirCreate ($ZipPfad[1])

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

    If FileExists ( $Zipdatei) = 1 then ;Überprüfung ob es die Zip Datei schon gibt
    $box = MsgBox (1,"Zip-Datei",$zipdateiname & ".zip existiert bereits"& @CRLF & "Soll diese gelöscht und neu angelegt werden?")
    If $box = 1 Then
    FileDelete($Zipdatei)
    Zip ($Pfad ,$Zipdatei)
    EndIf
    ElseIf $box = 2 Then ;cancel oder x gedrückt
    Exit ;Datei wird nicht gezippt wenn abbrechen oder x gedrückt wurde
    Else


    ;DirCreate("c:\public\source")
    Zip ($pfad ,$zipdatei)
    EndIf

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

    ; PlugIn schließen.
    PluginClose($hPluginDll)
    MsgBox(0, "Zip-Datei", "Zip-Datei wurde erstellt Programm wird beendet" )

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

    func Zip ($Pfad ,$Zipdatei) ; Funktion zum erstellen des ZipDateien

    $hArchive = _ZipCreate($Zipdatei) ;Anlegen des Zip Archives
    MsgBox (0,"Zip-Datei erstellen","Zip- Datei wird erstellt,"& @CRLF & "dies kann je nach größe der Datei etwas dauern")
    GUISetState(@SW_SHOW)
    GUISetCursor(15,1)
    _ZipAddDir($hArchive,$pfad) ;Einfügen der Daten ins Archive
    ;_ZipDeleteFile($hArchive,"Makepublic.exe")
    GUISetCursor(2,1)
    GUISetState(@SW_HIDE)
    _ZipClose($hArchive) ;Zip Archive schließen

    EndFunc

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

    Func Release($PfadReleasealt ) ; Funktion zum erstellen des Releasordners

    $PfadReleaseneu = InputBox ( "Releas:", "Bitte geben sie Programmordner an", "c:\public\Programme\" , "", 350,125)
    If @error = 1 then exit ; Cancel gedrückt
    If FileExists ( $PfadReleaseneu ) = 1 then
    $box = MsgBox (1,"Release","Programmordner existiert bereits"& @CRLF & "Soll dieser gelöscht und neu angelegt werden?")
    If $box = 1 Then
    DirRemove($PfadReleaseneu,1)
    DirCopy ( $PfadReleasealt, $PfadReleaseneu ,1 ) ;Inhalt Ordner Release wird kopiert
    EndIf
    If $box = 2 Then Exit ;Release abbrechen wenn abbrechen oder x gedrückt wird
    Else
    DirCopy ( $PfadReleasealt, $PfadReleaseneu ,1 ) ;Inhalt Ordner Release wird kopiert
    EndIf
    MsgBox(0, "", "Programmordner wurde angelegt")

    EndFunc

    [/autoit]

    Schönes Wochenende übrigens

    Einmal editiert, zuletzt von hanswurst (9. Juni 2008 um 09:59)

  • Zitat

    das Problem ist nur wenn ich die exe(mein ausführbares Programm) mit auf einen anderen rechner nehme, ist die ddl datei nicht da.

    Versuch mal FileInstall =)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

    • Offizieller Beitrag

    Hallo,

    Du musst nur statt _ZipPlugin.au3 die Datei _ZipPlugin.pll.au3 includen und am Anfang deines Programms die Funktion _ZipPluginInit() aufrufen!

    PS: Es handelt sich hier nicht um ein PlugIn für WinZip, sondern um eine ,von Stephen Podhajecki programmierte, dll mit dem Namen Au3Zip.dll. Laut Lizenzbedingung von WinZip ist sowas nämlich untersagt!

  • Hat geklappt, danke dafür erst mal.
    Allerding wurde mir beim Ausführen ein Fehler in Reihe 53 der _ZipPlugin.pll.au3 angezeigt, If anweisung ohne then. Nachdem ich das then und 8 Zeilen später ein endif eingefügt hatte funktionierte das ganze.

    Durch _ZipPluginInit() wird dann im Ordner der Exe ein Ordner lib mit der ddl Datei erzeugt. Auf diese greift das Programm dann zu.
    Hab zwar gehofft mann könne die ddl Datei so in die EXE integrieren, das mann sie gar nicht mehr braucht, aber Hauptsache es funktioniert .