Vielleicht kennt das ja auch schon jemand von euch und kann mir so weiter helfen OHNE dass ich ein funktionierendes reproduzierendes Beispielscript anfertigen muss.
Ich habe 2 Scripte. Script 1 ist das Hauptprogramm mit einem Button, über den ich das 2. Script (dann als .exe) starte. Dieses 2. Script wartet auf Nutzereingaben. Wenn ich dann auf "okay" klicke, soll mit diesen Daten eine neue Exe Datei erstellt werden.
Das funktioniert per Komandozeilenaufruf des Compilers.
Beispielscript
#include <File.au3>
#include <misc.au3>
Global $Basispfad= @ScriptDir & "\erstellte Files\"
Global $Template = @ScriptDir & "\" & "Template.au3"
Global $Tempfile = @ScriptDir & "\" & "Tempfile.au3"
Global $INI_FILE = @ScriptDir & "\" & "Data\INIFile.ini"
Global $btnOkay, $input1, $input2, $input3, $input4, $input5
Global $btnExit, $input6, $input7, $input8, $input9
Global $hGui = GUICreate("mein GUI", 300, 330, 1020, 50)
GUISetFont(10)
GUICtrlCreateLabel("Wert 1", 10, 10, 100, 25)
GUICtrlCreateLabel("Wert 2", 10, 40, 100, 25)
GUICtrlCreateLabel("Wert 3", 10, 70, 100, 25)
GUICtrlCreateLabel("Wert 4", 10, 100, 100, 25)
GUICtrlCreateLabel("Wert 5", 10, 130, 100, 25)
GUICtrlCreateLabel("Wert 6", 10, 160, 100, 25)
GUICtrlCreateLabel("Wert 7", 10, 190, 100, 25)
GUICtrlCreateLabel("Wert 8", 10, 220, 100, 25)
GUICtrlCreateLabel("Wert 9", 10, 250, 100, 25)
$btnOkay = GUICtrlCreateButton("Okay", 10, 300, 80, 20)
$btnExit = GUICtrlCreateButton("Abbruch", 210, 300, 80, 20)
$input1 = GUICtrlCreateInput("", 120, 7, 170, 20)
$input2 = GUICtrlCreateInput("", 120, 34, 170, 20)
$input3 = GUICtrlCreateCombo("", 120, 61, 170, 20)
$input4 = GUICtrlCreateCombo("", 120, 92, 170, 20)
$input5 = GUICtrlCreateCombo("", 120, 123, 170, 20)
$input6 = GUICtrlCreateInput("", 120, 154, 170, 20)
$input7 = GUICtrlCreateInput("", 120, 185, 170, 20)
$input8 = GUICtrlCreateCombo("", 120, 216, 170, 20)
$input9 = GUICtrlCreateCombo("", 120, 247, 170, 20)
GUICtrlSetData($input1, "Eingabe 1")
GUICtrlSetData($input2, "Eingabe 2")
GUICtrlSetData($input3, "Eingabe 3a|Eingabe 3b|Eingabe 3c|Eingabe 3e", "Eingabe 3a")
GUICtrlSetData($input4, "Eingabe 4a|Eingabe 4b", "Eingabe 4a")
GUICtrlSetData($input5, "Eingabe 5a|Eingabe 5b", "Eingabe 5a")
GUICtrlSetData($input6, "")
GUICtrlSetData($input7, "")
GUICtrlSetData($input8, "Eingabe 8a|Eingabe 8b|Eingabe 8c|Eingabe 8d", "Eingabe 8a")
GUICtrlSetData($input9, "Eingabe 9a|Eingabe 9b|Eingabe 9c|Eingabe 9d", "Eingabe 9a")
GUISetState()
While 1
Switch GUIGetMsg()
Case -3, $btnExit
Exit
Case $btnOkay
_neuesTool()
Exit
EndSwitch
WEnd
Func _neuesTool()
Local $var1 = GUICtrlRead($input1), $var2 = GUICtrlRead($input2), $var3 = GUICtrlRead($input3), $var4 = GUICtrlRead($input4), $var5 = GUICtrlRead($input5)
Local $var6 = GUICtrlRead($input6), $var7 = GUICtrlRead($input7), $var8 = GUICtrlRead($input8), $var9 = GUICtrlRead($input9)
Local $compilerPath = "", $PathDest = $Basispfad & " " & $var4 & " - " & $var1
Local $temp = StringSplit(@AutoItExe,"\")
For $i = 1 to $temp[0]-1 Step +1
$compilerPath = $compilerPath & $temp[$i] & "\"
Next
$compilerPath = $compilerPath & "Aut2Exe\Aut2exe.exe"
FileCopy($Template, $Tempfile, 9); erstellt von der Vorlage eine temporäre .au3 Datei
_FileWriteToLine($Tempfile, 16, '$var1 = "' & $var1 & '"', True) ; Schreibt die Daten in die temporäre Datei
_FileWriteToLine($Tempfile, 17, '$var2 = "' & $var2 & '"', True)
_FileWriteToLine($Tempfile, 18, '$var3 = "' & $var3 & '"', True)
_FileWriteToLine($Tempfile, 19, '$var4 = "' & $var4 & '"', True)
_FileWriteToLine($Tempfile, 20, '$var5 = "' & $var5 & '"', True)
_FileWriteToLine($Tempfile, 21, '$var6 = "' & $var6 & '"', True)
_FileWriteToLine($Tempfile, 22, '$var7 = "' & $var7 & '"', True)
_FileWriteToLine($Tempfile, 23, '$var8 = "' & $var8 & '"', True)
_FileWriteToLine($Tempfile, 24, '$var9 = "' & $var9 & '"', True)
RunWait('"' & $compilerPath & '" /in "' & $Tempfile & '" /out "' & $PathDest & '.exe" /x86')
If FileExists($PathDest & '.exe') Then
IniWrite($INI_FILE, $var1, "Wert 2", $var2)
IniWrite($INI_FILE, $var1, "Wert 3", $var3)
IniWrite($INI_FILE, $var1, "Wert 4", $var4)
IniWrite($INI_FILE, $var1, "Wert 5", $var5)
IniWrite($INI_FILE, $var1, "Wert 6", $var6)
IniWrite($INI_FILE, $var1, "Wert 7", $var7)
IniWrite($INI_FILE, $var1, "Wert 8", $var8)
IniWrite($INI_FILE, $var1, "Wert 9", $var9)
Else
MsgBox(0,"Fehler", "Datei wurde nicht erstellt...", 2)
EndIf
EndFunc
Alles anzeigen
Wenn ich das ganze via SciTE ausführe (per F5) funktioniert es wunderbar. Die neue .exe wird erfolgreich erstellt.
ABER: Sobald ich das ganze im compilierten Zustand versuche funktioniert dieser Aufruf scheinbar nicht mehr bzw wird ignoriert. Alles andere im Script wird dargestellt und funktioniert.
Nach dieser Codezeile frage ich ab, ob die neue .exe existiert. Jetzt kommt das aberwitzige:
wenn die .exe BEREITS VORHANDEN ist und ich erstelle eine neue mit selben Namen im compiliertem Zustand, DANN klappt es komischerweise.
Lösche ich diese Datei und versuche es erneut, dann klappts wieder nicht.
Bin mittlerweile genervt, weil ich nicht mehr weiter weiss.
Edit: Beispielscript hinzugefügt
alles sensible entfernt, sonst ist alles gleich