Parameterübergabe klappt nicht

  • Hallo Community
    Ich verwende immer noch AutoIt v3.1.1 weil ich da die Scripte recompilieren kann.
    Leider funktioniert bei dieser Version die Variablenübergabe mit "ShellExecute" nicht, oder anders als bei AutoIt v3.2.
    Bitte werft mal nen Blick auf mein mißratenes Script: (Script.au3 definiert die Variable und soll sie an return.cmd übergeben)

    script.au3 :

    [autoit]

    $Save = FileSaveDialog ( "Datei speichern unter", @MyDocumentsDir, "Windows-Image (*.wim)", 3)

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

    If @error Then
    MsgBox(4096,"","Save cancelled.")
    Else
    MsgBox(4096,"","You chose " & $Save)
    EndIf

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

    ;ShellExecute(@ScriptDir & "\return.cmd", $Save) ; =OK in v3.2
    run(@ScriptDir & "\return.cmd " & $Save) ; =Nicht OK in v3.1

    [/autoit]

    return.cmd :

    Code
    @echo off
    title Return Variable
    color 1e
    
    
    :_check
    echo.
    echo. der erste Wert lautet "%1.wim"
    echo.
    pause

    Vielleicht fehlen irgendwo die Anführungsstriche oder was anderes.
    Da die Ausführung in einem Ordner ohne Leerzeichen läuft, nehme ich an daß -@ScriptDir &- irgendwie in Anführungszeichen gesetzt werden muß.
    Hab schon alle möglichen Variationen ohne Erfolg durchprobiert.
    Es wäre schön, wenn jemand mein Script korrigieren könnte.

    Gruß Macrostop

    2 Mal editiert, zuletzt von Macrostop (8. Oktober 2008 um 14:10)

  • Wäre natürlich schön gewesen, wenn Du geschrieben hättest was nicht geht, bzw. was falsch ausgeführt wird.

    Um aber die Probleme mit Leerzeichen zu umgehen gäbe es z.B. diese zwei Möglichkeiten:

    Spoiler anzeigen
    [autoit]

    $Save = FileSaveDialog ( "Datei speichern unter", @MyDocumentsDir, "Windows-Image (*.wim)", 3)

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

    If @error Then
    MsgBox(4096,"","Save cancelled.")
    Else
    MsgBox(4096,"","You chose " & $Save)
    EndIf

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

    run(Chr(34) & @ScriptDir & "\return.cmd" & Chr(34) & " " & Chr(34) & $Save & Chr(34)) ; Chr(34) = "

    [/autoit]

    oder...

    Spoiler anzeigen
    [autoit]

    $Save = FileSaveDialog ( "Datei speichern unter", @MyDocumentsDir, "Windows-Image (*.wim)", 3)

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

    If @error Then
    MsgBox(4096,"","Save cancelled.")
    Else
    MsgBox(4096,"","You chose " & $Save)
    EndIf

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

    run('"' & @ScriptDir & '\return.cmd" "' & $Save & '"')

    [/autoit]

    Beide Möglichkeiten sind aber ungetestet, da ich zur Zeit unter Linux schreibe !

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    • Offizieller Beitrag
    Zitat

    Ich verwende immer noch AutoIt v3.1.1 weil ich da die Scripte recompilieren kann.


    Recompilieren?

    Gibt aus meiner Sicht wirklich Null Gründe, eine andere als die aktuelle AutoIt-Version zu verwenden. Es werden jedes Mal etliche Bugs entfernt und die Geschwindigkeit hat sich auch dramatisch erhöht, warum also altes verwenden?
    Das Umschreiben ist auch keine große Sache, es sin lediglich Funktionsumbenennungen.

    Und: Der Support wird schwer, wenn man alte und verbuggte Versionen "unterstützen" soll...

    peethebee

  • Micha_he
    :thumbup: Vielen Dank für Deine Antwort, beide Scripte übergeben die Variable korrekt. :thumbup:

    Auf der Suche nach Regeln für Anführungszeichen hab ich nur einzelne Beispiele gefunden;
    gibts zu dem Thema eventuell ein Tutorial oder eine Beispielsammlung ?

    peethebee
    Wenn in der neueren Version v3.2 die sinnvolle Option des Recompilierens entfernt worden ist, mit der Begründung daß es "zu gefährlich" ist, recompilierbaren Code zu erstellen, dann frag ich mich: Wozu hat´s denn die Option "/nodecompile" gegeben ?
    War denn der Code zu knacken ?
    Warum ist der Confuscator nicht als Compilier-Option integriert ?
    Nichts gegen AutoIt v3.2, aber als Amateur ist es mir lieber, daß ich meine Exen wieder "aufmachen" kann, z.B. mit der "/pass" Option.
    Sicher bin ich mit dieser Ansicht nicht allein, deshalb kann ich mir vorstellen, daß die fähigen Köpfe von AutoIt auch hier nachbessern werden.

    Gruß Macrostop

    • Offizieller Beitrag

    In den alten Versionen war es problemlos möglich, aus der Exe wieder ein AutoIt-Script herzustellen (decompilen). Daran änderte auch der Obfuscator nichts. Erst in den neueren AutoIt-Versionen ist der Obfuscator wesentlich besser geworden.

    Ich frage mich aber, warum Du unbedingt auf diese Möglichkeit des decompilierens bestehst. Du hast doch den Quellcode?! :?:

    Und ich glaube nicht, dass die AutoIt-Entwickler wieder den Schritt zurück machen werden, denn die Mehrheit wird eher das Gegenteil haben wollen, nämlich dass man die Exe nicht decompilieren kann.

    • Offizieller Beitrag

    Nein, da wird mit Sicherheit und zu Recht nicht nachgebessert. Man sollte seine Quell-au3-Dateien aufheben, das ist auch in jeder anderen Sprache so, gewöhn dich also lieber gleich dran ;).
    Skripte in Version 3.1 sind absolut nicht sicher vor einem Dekompilieren, auch mit Passwort nicht (eben weil es die Hintertür geben sollte, dass es grundsätzlich dekompilierbar ist). In Version 3.2 ist das wesentlich verbessert worden, auch wenn es per Defintion keine 100%ige Sicherheit davor geben kann.

    Also: Skripte aufheben und mit 3.2 hunderte neue Funktionen nutzen :).

    peethebee

  • Vielen Dank für Eure Mühe, mir die neue Version von AutoIt schmackhaft zu machen.
    Leider hab ich oft den Quellcode gelöscht, weil ich wußte daß ich die Exen recompilieren kann.

    Naja, wahrscheinlich ist es Zeit alte Zöpfe abzuschneiden und neue Methoden zum archivieren des Quellcodes zu entwickeln. :S

    Gruß und Dank von Macrostop

    Oehm :huh: Also, dann hab´ ich erstmal keine weiteren Fragen, und sag´mal daß der Fall gelöst wurde ?
    Oder muß ich noch was machen ? :?:

    Einmal editiert, zuletzt von Macrostop (8. Oktober 2008 um 19:06)