Problem mit Schleife und INI auslesen
-
Guten Tag
Ich habe eine ini Datei mit folgendem Inhalt:
[Service] ; Zeit die zwischen den einzelnen Durchgängen vergeht in Milisekunden (Sekunden * 1000) ; Darf nicht kleiner als 60000 (= 1 min.) sein timeout=120000 ; Pfad zu der Datei, die ausgeführt werden soll, UNC Pfade werden unterstützt ; Darf nicht länger als 80 Zeichen sein file=\\vechbs-S9001\inventory$\testII.cmd
Dazu habe ich einen Service der immer nach einer bestimmten Zeit (timeout aus ini) folgende Schleife durchlaufen soll:
do { timeout = GetPrivateProfileInt( "Service", "timeout",DEFAULTVALUE_MATCHES, inipath ); GetPrivateProfileString("Service","file", NULL, batchpath, sizeof(batchpath), inipath ); strcat(execmd,"/c "); strcat(execmd,batchpath); ShellExecute(NULL, "open", "cmd.exe", execmd, NULL, SW_HIDE); } while ( WaitForSingleObject( stopServiceEvent, timeout ) == WAIT_TIMEOUT );
Sprich das Programm soll immer wenn die Schleife durchlaufen wird die Beiden ini Einträge neu einlesen.
Mit dem Timeout funktioniert alles wunderbar, beim file Eintrag aber behält er den alten Wert, sprich wenn der Wert in der ini geändert wird verwendet er nach wie vor den alten Wert. Bei einem neustart des Programms wird der Wert neu eingelesen, lässt sich dann aber während dem Betrieb wieder nicht ändernIch bitte um Hilfe
-
Ich vermute mal ein Problem mit dem strcat() - dadurch verlängert sich der Befehlsstring mit jedem Schleifendurchlauf weiter (mich wundert, daß du es noch nicht geschafft hast, auf diese Weise deinen RAM zu sprengen).
-
Hallo nochmal danke konnte das Problem durch austauschen von strcat in strcpy lösen:
do { timeout = GetPrivateProfileInt( "Service", "timeout",DEFAULTVALUE_MATCHES, inipath ); GetPrivateProfileString("Service","file", NULL, batchpath, sizeof(batchpath), inipath ); strcpy(execmd,"/c "); strcat(execmd,batchpath); ShellExecute(NULL, "open", "cmd.exe", execmd, NULL, SW_HIDE); } while ( WaitForSingleObject( stopServiceEvent, timeout ) == WAIT_TIMEOUT );