在下面的例子中,我想延迟执行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'甚至不等待服务器启动默认。 –