Im folgenden Beispiel möchte ich die Ausführung des Befehls verzögern, bis der Postgres-Server betriebsbereit ist.Inno Setup - Warten auf den Start der Postgres-Datenbank
if Exec('pg_ctl', 'start -D C:\ProgramData\PostgresQL\data', '', SW_SHOW, ewWaitUntilIdle, ResultCode) then
begin
Sleep(10000);
// Create our database user
if Exec('createuser', '-w -d -R -S testdb', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
Leider eine beliebige Sleep()
verwendet, ist der einzige Weg, ich habe es geschafft, dies zu erreichen. Die exWaitUntilIdle
Flagge überrascht natürlich nicht und verzögert die Ausführung lange genug (wenn überhaupt).
So hat jemand eine robustere Möglichkeit sicherzustellen, dass die createuser
nicht ausgeführt wird, bis der Serverbefehl Postgres (pg_ctl start
) läuft, inaktiv und bereit Befehle zu akzeptieren?
Warum verwenden Sie 'ewWaitUntilTerminated' nicht? –
Martin pg_ctl wird nicht beendet. Es startet einen Server, der ausgeführt werden muss, bis alle nachfolgenden Befehle ausgeführt werden. – kh25
Das 'pg_ctl' startet einen Server im Hintergrund, oder? Laut Dokumentation: * Der Server wird im Hintergrund gestartet, und seine Standardeingabe ist an/dev/null (oder unter Windows) angehängt. * Die Dokumentation besagt explizit, dass 'pg_ctl' nicht einmal auf den Start des Servers wartet standardmäßig. –