在下面的例子中,我想延遲執行createuser
命令,直到Postgres服務器啓動並運行。Inno Setup - 等待Postgres數據庫啓動
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)
不幸的是使用任意Sleep()
是我已經成功地實現這一目標的唯一途徑。毫不奇怪,exWaitUntilIdle
標誌沒有做到這一點,並延遲執行足夠長的時間(如果有的話)。
因此,有沒有人有更穩健的方式來確保createuser
不會被執行,直到Postgres(pg_ctl start
)服務器命令運行,空閒並準備好接受命令?
爲什麼不使用'ewWaitUntilTerminated'? –
Martin pg_ctl未終止。它啓動一個服務器,必須保持運行,直到執行完所有後續命令。 – kh25
'pg_ctl'在後臺啓動服務器,不是嗎?根據文檔:*服務器在後臺啓動,它的標準輸入連接到/ dev/null(或者在Windows上是nul)*文檔明確指出'pg_ctl'甚至不等待服務器啓動默認。 –