.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

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

  • 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....