.EXE aus einem compilten AutoIt Skript erstellen?

  • Hallo Autoit.de Gemeinde!

    Habe wieder Mal ne Frage!

    Ist es möglich mit AutoIT eine Art .EXE Generator zu erstellen, jedoch vom compilten Skript aus?

    oder geht das nur mit C/C++?


    danke
    mfg. sl4y3r

  • hmm... aba irgndwo is da ein bug in dem skirpt oO

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Comment=Bat2Exe by Padmak
    #AutoIt3Wrapper_Res_Description=Bat2Exe
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=(c) by Padmak
    #AutoIt3Wrapper_Res_Language=1031
    #Obfuscator_Parameters=/cs 1 /cf 1 /cv 1
    #include <Array.au3>
    #include <Process.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    $ini = @ScriptDir & "\lang.ini"
    If Not FileExists($ini) Then
    MsgBox(64, "Error", "Unable to load lang.ini")
    Exit
    Else
    $source = IniRead($ini, "Source-Label", "data", "Error")
    $ts1 = IniRead($ini, "Tabsheet-1", "data", "Error")
    $ts2 = IniRead($ini, "Tabsheet-2", "data", "Error")
    $commentlabel = IniRead($ini, "Comment-Label", "data", "Error")
    $descriptionlabel = IniRead($ini, "Description-Label", "data", "Error")
    $descriptionedit = IniRead($ini, "Description-Edit", "data", "Error")
    $versionlabel = IniRead($ini, "Version-Label", "data", "Error")
    $copyrightlabel = IniRead($ini, "Legal Copyright-Label", "data", "Error")
    $iconlabel = IniRead($ini, "Icon-Label", "data", "Error")
    $searchbutton = IniRead($ini, "Search-Button", "data", "Error")
    $outputlabel = IniRead($ini, "Output-Label", "data", "Error")
    $outputbutton = IniRead($ini, "Output-Button", "data", "Error")
    EndIf

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

    Opt("GUIOnEventMode", 1)
    $Form1 = GUICreate("Bat2Exe by Padmak", 647, 493, -1, -1)
    $Tab1 = GUICtrlCreateTab(8, 8, 633, 409)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    $TabSheet1 = GUICtrlCreateTabItem($ts1)
    GUICtrlSetState(-1, $GUI_SHOW)
    $Edit1 = GUICtrlCreateEdit("", 20, 65, 609, 345)
    GUICtrlSetData(-1, "")
    $Label1 = GUICtrlCreateLabel($source, 20, 41, 228, 17)
    $TabSheet2 = GUICtrlCreateTabItem($ts2)
    $Label3 = GUICtrlCreateLabel($commentlabel, 48, 40, 60, 17)
    $Edit2 = GUICtrlCreateEdit("", 112, 40, 513, 65, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
    GUICtrlSetData(-1, "Created by Padmak"&Chr(39)&"s Bat2Exe")
    $Label4 = GUICtrlCreateLabel($descriptionlabel, 32, 112, 72, 17)
    $Edit3 = GUICtrlCreateEdit("", 112, 112, 513, 41, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
    GUICtrlSetData(-1, $descriptionedit)
    $Label5 = GUICtrlCreateLabel($versionlabel, 64, 160, 42, 17)
    $Input2 = GUICtrlCreateInput("1.0.0.0", 112, 160, 121, 21)
    $Label6 = GUICtrlCreateLabel($copyrightlabel, 24, 192, 80, 17)
    $Input3 = GUICtrlCreateInput("(c) by Padmak", 112, 192, 153, 21)
    $Label7 = GUICtrlCreateLabel($iconlabel, 72, 224, 28, 17)
    $Input4 = GUICtrlCreateInput("", 112, 224, 225, 21)
    $Button1 = GUICtrlCreateButton($searchbutton, 344, 224, 91, 25, 0)
    GUICtrlCreateTabItem("")
    $Button2 = GUICtrlCreateButton($outputbutton, 344, 448, 291, 25)
    $Input1 = GUICtrlCreateInput("Myfile.exe", 8, 448, 257, 21)
    $Label2 = GUICtrlCreateLabel($outputlabel, 8, 424, 120, 17)
    GUICtrlSetOnEvent($Button1, "search")
    GUICtrlSetOnEvent($Button2, "_Compile")
    GUISetOnEvent($GUI_EVENT_CLOSE, "spezial")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "spezial")
    GUISetState(@SW_SHOW)

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

    Func search()
    $icon = FileOpenDialog("Icon suchen", @ScriptDir, "Icon-Dateien (*.ico)")
    GUICtrlSetData($Input4, $icon)
    EndFunc

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

    Func spezial()
    If @GUI_CtrlId = $GUI_EVENT_CLOSE Then Exit
    If @GUI_CtrlId = $GUI_EVENT_MINIMIZE Then GUISetState(@SW_MINIMIZE)
    EndFunc

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

    Func _Compile()
    $pfad = GUICtrlRead($Input1)
    $text = GUICtrlRead($Edit1)
    $name = StringSplit($pfad, ".")
    $comment = GUICtrlRead($Edit2)
    $description = GUICtrlRead($Edit3)
    $version = GUICtrlRead($Input2)
    $copyright = GUICtrlRead($Input3)
    $icon = GUICtrlRead($Input4)
    $splittext = StringRight($pfad, 4)
    If Not ($splittext = ".exe") Then $pfad = $pfad & ".exe"
    GUICtrlSetState($Input1, $pfad)
    If $text = "" Then
    MsgBox(0, "Fehler", "Bitte etwas eintragen")
    Return
    EndIf
    FileInstall("Aut2exe.exe", "compiler\Aut2exe.exe")
    FileInstall("AutoItSC.bin", "compiler\AutoItSC.bin")
    FileInstall("upx.exe", "compiler\upx.exe")
    FileSetAttrib("Aut2exe.exe", "+SH")
    FileSetAttrib("AutoItSC.bin", "+SH")
    FileSetAttrib("upx.exe", "+SH")
    $textreplace = StringReplace($text, @CRLF, '" & @CRLF & "')
    $au3file = FileOpen("temp.au3", 2)
    FileWrite($au3file, '#AutoIt3Wrapper_Res_Comment=' & $comment & @CRLF)
    FileWrite($au3file, '#AutoIt3Wrapper_Res_Description=' & $description & @CRLF)
    FileWrite($au3file, '#AutoIt3Wrapper_Res_Fileversion=' & $version & @CRLF)
    FileWrite($au3file, '#AutoIt3Wrapper_Res_LegalCopyright=' & $copyright & @CRLF)
    FileWrite($au3file, '#NoTrayIcon' & @CRLF)
    FileWrite($au3file, '$file = FileOpen ("temp.bat", 2)' & @CRLF)
    FileWrite($au3file, 'FileSetAttrib("temp.bat", "+SH")' & @CRLF)
    FileWrite($au3file, 'FileWrite($file, "' & $textreplace & '")' & @CRLF)
    FileWrite($au3file, 'FileClose($file)' & @CRLF)
    FileWrite($au3file, 'RunWait("temp.bat", "", @SW_SHOW)' & @CRLF)
    FileWrite($au3file, 'FileDelete("temp.bat")' & @CRLF)
    FileWrite($au3file, 'Exit' & @CRLF)
    FileClose($au3file)
    $bat = FileOpen($name[1] & ".bat", 2)
    FileWrite($bat, $text)
    FileSetAttrib("temp.au3", "+SH")
    ProgressOn("Kompilieren", ".bat-Datei wird kompiliert...", "", -1, -1)
    $random = Random(10, 70, 5)
    For $i = 1 To $random Step 1
    ProgressSet($i, "", ".bat-Datei wird kompiliert...")
    Sleep(10)
    Next
    _RunDOS("Aut2exe.exe /in temp.au3 /out " & $pfad)
    For $i = $random To 100 Step 1
    ProgressSet($i, "", ".bat-Datei wird kompiliert...")
    Sleep(10)
    Next
    FileDelete("temp.au3")
    ProgressOff()
    FileDelete("Aut2exe.exe")
    FileDelete("AutoItSC.bin")
    FileDelete("upx.exe")
    MsgBox(0, "Erfolgraeich", "Die .bat-Datei wurde erfolgreich Kompiliert")
    EndFunc

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

    While 1
    Sleep(10)
    WEnd

    [/autoit]
  • Wenn ich fragen darf:
    wo ist da ein bug??
    bei mir hauts einwandfrei...
    aber ich such auch schon länger nach ner möglichkeit wie man direkt aus ner .au3 datei kompiliert :D

    Padmak

  • du hast den Wrapper auch gar nicht mmit installiert :O
    Auto2Exe ist nur der Compiler
    Der Wrapper heißt AutoIt3Wrapper.exe (aber ob der ohne installation funktioniert?)

  • ich wollte des nur ausprobieren ob des funzt^^
    meine frage wär noch: kann man aus dem Script raus compilen?
    also ohne die anderen Dateien mitzuschleppen?
    dann kann man nämlich den code erheblich (!!) verkürzen...

    Padmak

  • wenn Du ohne Motor Auto fahren kannst,
    dann geht das bestimmt auch mit .au3-Dateien... :D

    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. ;)

  • wenn Du ohne Motor Auto fahren kannst,
    dann geht das bestimmt auch mit .au3-Dateien... :D

    ich mein ja nur
    hätt ja sein können ;(
    also brauch ich die AutoIt3Wrapper.exe, die upx.exe und die AutoItSC.bin um das ganze zu kompilieren UND die wrapper-Informationen einzufügen?
    lieg ich da richtig?

    Padmak

  • ich wollte des nur ausprobieren ob des funzt^^
    meine frage wär noch: kann man aus dem Script raus compilen?
    also ohne die anderen Dateien mitzuschleppen?
    dann kann man nämlich den code erheblich (!!) verkürzen...

    Padmak


    Ehrrm... vlt. Gehtz.
    habe gerade die Wrapper Datei rausgesucht
    IST AUCH MIT AUTOIT GESCHRIEBEN + OPEN SOURCE

    Source Code von AutoIt3Wrapper.exe
    im ANHANG

    ...so gefunden :P
    so müssts gehn

    [autoit]

    ; Compile the script with the new/updated directives
    Global $h_run
    If $INP_AutoIT3_Version = "Beta" Then
    $h_run = Run('"AutoIt3Wrapper.exe" /beta /CompileDefaults /in "' & $ScriptFile_In & '" /autoit3dir "' & $CurrentAutoIt_InstallDirBeta & '"', "", Default, $STDERR_CHILD + $STDOUT_CHILD)
    Else
    $h_run = Run('"AutoIt3Wrapper.exe" /prod /CompileDefaults /in "' & $ScriptFile_In & '" /autoit3dir "' & $CurrentAutoIt_InstallDir & '"', "", Default, $STDERR_CHILD + $STDOUT_CHILD)
    EndIf

    [/autoit]

    mfg. sl4y3r

    Einmal editiert, zuletzt von sl4y3r (5. Januar 2009 um 20:16)

  • das geht aber glaub ich nur wenn man autoit installiert hat oder?
    das will ich ja nicht
    es soll ja überall (naja fast, windoof rechner halt) laufen

    Padmak

  • das geht aber glaub ich nur wenn man autoit installiert hat oder?
    das will ich ja nicht
    es soll ja überall (naja fast, windoof rechner halt) laufen

    Padmak


    Ja verstehe....