Wie compiliere ich x86 und x64-Version in einem Rutsch?

  • Hallo Zusammen,

    ich möchte ein Programm in einem Rutsch für x86 und x64 compilieren.

    Kann ich das mit dem AutoIt3Wrapper bewerkstelligen? Und wenn ja wie?

    Bisher compiliere ich immer erst die x64-Version und dann die x86-Version. Da das Programm ne stattliche Größe mittlerweile hat und auch mein Rechner nicht der schnellste ist (P4) dauert das leider immer sehr lange, zumal immer der Obfuscator viel Zeit in Anspruch nimmt.

    Momentan sieht es so aus:
    - Ich starte "MeinProgramm_V1.2.3.4.au3"
    - setze "#AutoIt3Wrapper_UseX64=y"
    - Mit F7 compiliere ich dann
    - Mach aus "MeinProgramm_V1.2.3.4.exe" dann "MeinProgramm_V1.2.3.4_x64.au3" und aus "MeinProgramm.exe" dann "MeinProgramm_x64.exe"
    - setze "#AutoIt3Wrapper_UseX64=n"
    - Mit F7 compiliere ich dann ein zweites Mal

    Das Resultat ist dann, so wie ich es will:
    MeinProgramm.exe
    MeinProgramm_x64.exe
    MeinProgramm_V1.2.3.4.exe
    MeinProgramm_V1.2.3.4_x64.exe

    Hier mal meine au3:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Version=beta
    #AutoIt3Wrapper_icon=.\MeinIcon_32x32.ico
    #AutoIt3Wrapper_outfile=.\MeinProgramm.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_UseX64=y
    #AutoIt3Wrapper_Res_Description=Es sagt einfach nur hallo!
    #AutoIt3Wrapper_Res_Fileversion=1.2.3.4
    #AutoIt3Wrapper_Res_LegalCopyright=(c) by Meiner Einer
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_Field=Dateiname|MeinProgramm
    #AutoIt3Wrapper_Res_Field=Email|[email='mail@meinedomain.de'][/email]
    #AutoIt3Wrapper_Res_Field=Web|http://www.meinedomain.de
    #AutoIt3Wrapper_Res_Field=Firma|Meiner Einer Service
    #AutoIt3Wrapper_Run_After=copy "%out%" ".\MeinProgramm_V%fileversion%.exe"
    #AutoIt3Wrapper_Run_After=move ".\MeinProgramm_V%fileversion%.au3.tbl" ".\Obfuscator"
    #AutoIt3Wrapper_Run_After=move ".\MeinProgramm_V%fileversion%_Obfuscated.au3" ".\Obfuscator"
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/cs=1 /cn=1 /cf=1 /cv=1 /sf=1 /sv=1
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    ; Filename: MeinProgramm_V1.2.3.4.au3

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

    SayHello()

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

    Func SayHello()
    MsgBox(0, "Hallo", "Ich wollte nur hallo sagen! :-)")
    EndFunc ;==>SayHello

    [/autoit]

    Der AutoIt-Wrapper macht ja mehr, als nur obfuscieren und compilieren. Er ruft auch den ResHacker auf und ersetzt Icon und die Datei-Informationen.

    Ich könnte natürlich jetzt alles in einer Batch machen, also SyntaxCheck, obfuscieren, x64-Variante compilieren, x86-Variante compilieren, aber wie rufe ich dann genau den ResHacker auf?

    Trotzdem hoffe ich, dass ich das irgendwie mit dem AutoIt3Wrapper bewerkstelligen kann. Hat jemand ne Idee?

    Besten Dank im voraus und ein schönes Wochenende!
    R@iner

  • Ich hab dir hier mal ein kurzes Script geschrieben, dass das für dich erledigt. ;)

    [autoit]

    #RequireAdmin

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

    $Path = FileOpenDialog("Datei auswählen", @ScriptDir, "Au3 (*.au3)")
    $PathDest = FileSaveDialog("Speichern unter", @ScriptDir, "Exe (*.exe)")
    RunWait(StringTrimRight(@AutoItExe, 11) & "Aut2Exe\Aut2exe.exe /in " & $Path & " /out " & $PathDest & ".exe /x86")
    RunWait(StringTrimRight(@AutoItExe, 11) & "Aut2Exe\Aut2exe.exe /in " & $Path & " /out " & $PathDest & "_x64.exe /x64")

    [/autoit]
  • Ist je nett von Dir, aber da fehlt fast alles von den Dingen, die ein normaler "F7", also ein "build" macht. ;)

    Mir ist schon klar, dass ich alles einzenln machen könnte, also AU3Check, obfuscieren, dann jeweils alles einzelnen compilieren, aber wie muss ich dann den ResHacker aufrufen?

    Ich hatte eigentlich gehofft, dass es eine Lösung mit dem AutoItWrapper gibt, der alles auf einmal macht.

    Happy computing!
    R@iner

  • Schau Dir die AutoIt3Wrapper-Direktiven in meinem ersten Posting an oder/und geht mal genau so vor wie ich es im ersten Posting beschrieben habe, dann siehst Du, dass mehrere (AutoIt-)Programme durch den AutoItWrapper hintereinander aufgerufen werden bis unten eine fertige Exe rausplumst. Speziell der Aufruf von ResHacker.exe! da wüßte ich nicht, wie ich Icon und die ganzen Felder in der fertigen Exe ausgetauscht bekomme.

    Happy computing!
    R@iner

  • Ich habe es noch nicht probiert, aber es müsste funktionieren:

    Spoiler anzeigen
    [autoit]

    #RequireAdmin

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

    $PathSource = FileOpenDialog("Script auswählen", @ScriptDir, "Au3 Scripts (*.au3)")
    $IconPath = FileOpenDialog("Icon auswählen", @ScriptDir, "Icons (*.ico)")
    $Complevel = InputBox("Kompressionslevel", "0 - 4", 2)
    $UPXPack = InputBox("UPX", "Mit UPX packen? 1 = Ja; 0 = Nein", 1)
    If $UPXPack = 1 Then
    $UPXPack = "/pack"
    Else
    $UPXPack = "/nopack"
    EndIf
    $ANSI_Unicode = InputBox("ANSI/Unicode", "1 = ANSI; 2 = Unicode", 2)
    If $ANSI_Unicode = 1 Then
    $ANSI_Unicode = "/ansi"
    Else
    $ANSI_Unicode = "/unicode"
    EndIf
    $Console = InputBox("Konsole/GUI", "1 = Konsole; 2 = GUI", 2)
    If $Console = 1 Then
    $Console = "/console"
    Else
    $Console = "/gui"
    EndIf
    $PathDest = FileSaveDialog("Speichern unter", @ScriptDir, "Exe (*.exe)")
    RunWait(StringTrimRight(@AutoItExe, 11) & "Aut2Exe\Aut2exe.exe /in " & $PathSource & " /out " & $PathDest & ".exe /icon " & $IconPath & " /comp " & $Complevel & " " & $UPXPack & " " & $ANSI_Unicode & " /x86 " & $Console)
    RunWait(StringTrimRight(@AutoItExe, 11) & "Aut2Exe\Aut2exe.exe /in " & $PathSource & " /out " & $PathDest & "_x64.exe /icon " & $IconPath & " /comp " & $Complevel & " " & $UPXPack & " " & $ANSI_Unicode & " /x64 " & $Console))

    [/autoit]


    Mehr ist über Parameter einfach nicht drin. :(

  • Vielen Dank für Deine Bemühungen, aber ich glaube, Du hast mich nicht verstanden.

    Ich will keinen AutoIt-Wrapper nachbauen, zumal ich speziell der ResHacker-Teil nicht nachbauen will oder wüßte, wie ich den aufrufen muß und wie das RessourceFile auszusehen hat.

    Mittlerweile habe ich mir die AutoIt3Wrapper.au3 angeschaut. So wie ich es verstehe, ist entweder ein x86 oder ein x64 möglich, aber nicht beides auf ein mal. Weder über commandline, noch über ne Directive. Ich werd mal Jos ne Email schreiben.

    Besten Dank und ein schönes Wochenende!
    R@iner

  • Wenn du den Compile-Prozess abgeschlossen hast, dann ist doch eine %Programmname%_Obfuscated.au3
    entstanden, oder? Die kannst du doch jetzt einfach als 64bit compilieren oder sehe ich das falsch?!
    Leider kann ich den Prozess nicht testen, da ich kein 64bit OS habe.
    Ungewöhnlich erscheint mir jedoch die Größe des Resultats:
    32bit: 296kb
    64bit: 781kb (auf 64 bit nach Obfuscateprozess gestellt - aus o.g. Gründen kann ich die Funktionalität nicht bestätigen!)
    Ist die Größe immer so gravierend bei 64bit?

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Ja so könnte man es machen, aber dann fehlen leider alle Resouce-Informationen, wie Logo, Fileversion, etc.in dem Compilat.

    Happy computing!
    R@iner

    PS: Ja die Filegröße ist bei mir auch so.