2016-04-25 87 views
2

在下面的例子中,我想延遲執行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)服務器命令運行,空閒並準備好接受命令?

+0

爲什麼不使用'ewWaitUntilTerminated'? –

+0

Martin pg_ctl未終止。它啓動一個服務器,必須保持運行,直到執行完所有後續命令。 – kh25

+0

'pg_ctl'在後臺啓動服務器,不是嗎?根據文檔:*服務器在後臺啓動,它的標準輸入連接到/ dev/null(或者在Windows上是nul)*文檔明確指出'pg_ctl'甚至不等待服務器啓動默認。 –

回答

2

使用ewWaitUntilTerminated國旗-w switch

等待啓動或者關閉的完成。等待是關機的默認選項,但不是初創公司。 ... pg_ctl根據啓動或關閉的成功返回一個退出代碼。

+0

似乎與-w開關一起使用。再次感謝。 – kh25