Eine .ini für mehrere Scripts.

12/28/2013 15:16 mo.tennis#16
nochmal zu meiner Frage. Warum frunktioniert das. Was ist da anders? :D
12/28/2013 15:21 alpines#17
Kannst du nochmal das posten was nicht ging (also die entscheidende Teile) und das was geht, ich möchte mir das jetzt ungern zusammensuchen.
12/28/2013 15:33 mo.tennis#18
ich habe 2 scripts und eine .ini.
Der erste script liegt alleine in einem ordner. und der Zweite mit der .ini in einem unterordner von diesem. Ich kann mit dem ersten script in die .ini schreiben. Und wenn ich den zweiten script per hand starte auch die ini lesen.
Wenn ich jedoch mit in script1 den script2 starte kann die .ini von script 2 nicht mehr gelesen werden.
Nun hab ich alles in einen ordner gepackt und es geht.
12/28/2013 17:35 KDeluxe#19
Hier mal die Erklärung:
Es ist wieder einmal ein exemplarisches Beispiel dafür, dass man nach Möglichkeit (und die besteht hier) immer "absolute" Pfade verwenden sollte. Wie ich schon so oft geschrieben habe wird bei relativen Pfadangaben nicht das tatsächliche Scriptverzeichnis verwendet, sondern das Arbeitsverzeichnis. Das erste Script befindet sich im Ordner
Code:
C:\Users\Moritz\Desktop\test123\teswt
Das Zweite Script befindet sich im Ordner
Code:
C:\Users\Moritz\Desktop\test123\teswt\testordner
Wo besteht jetzt aber das Problem? Ganz einfach!
Du startest das zweite Script mittels ShellExecute(), verwendest aber nur den 1. Parameter:
Code:
ShellExecute(@SCriptDir & "\testordner\script2.au3")
Was heißt das nun? Die relative Pfadangabe bezieht sich wie schon geschrieben auf das Arbeitsverzeichnis und nicht auf den tatsächlichen Scriptpfad. Da du den dritten Parameter von ShellExecute() nicht verwendest wird das Arbeitsverzeichnis vom ersten Script verwendet. Unter diesem Pfad befindet sich nun mal nicht die .ini, deshalb kann es nicht funktionieren.
Das Problem kannst du ganz einfach lösen, indem du "absolute" Pfade verwendest.
Hier mal eine angepasste Version deiner zwei Scripts:
Code:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 297, 161, 192, 124)
$Input1 = GUICtrlCreateInput("", 80, 40, 129, 21)
$Button1 = GUICtrlCreateButton(".ini schreiben", 104, 64, 75, 25)
$Button2 = GUICtrlCreateButton("script2 starten", 104, 96, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global Const $iniFile = @ScriptDir & "\testordner\Passwort.ini"

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			IniWrite($iniFile, "Passwort", "PW", GUICtrlRead($Input1))
		Case $Button2
			ShellExecute(@SCriptDir & "\testordner\script2.au3")
	EndSwitch
WEnd
Das zweite Script habe ich etwas mehr anpassen müssen:
Code:
#NoTrayIcon
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Test", 355, 223, 450, 360,$WS_POPUPWINDOW, $WS_EX_TOPMOST)
$input1 = GUICtrlCreateInput("", 56, 112, 233, 21,BitOR($ES_PASSWORD, $GUI_SS_DEFAULT_INPUT))
$unlock = GUICtrlCreateButton("Entsperren", 128, 160, 75, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global Const $iniFile = @ScriptDir & "\Passwort.ini"

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
;~ 		Case $GUI_EVENT_CLOSE
;~             Exit
		Case $unlock
			_prove()
	EndSwitch
WEnd

Func _prove()
	$pwread = GUICtrlRead($input1)
    $pw = IniRead($iniFile, "Passwort", "PW", "")
	If $pwread == $pw Then Exit
EndFunc
12/28/2013 23:37 mo.tennis#20
danke... auf sowas hab ich gewartet. danke für deine erklärung.

Und danke an alle für eure Hilfe!!!