The Windows installation service uses pg_ctl to perform the network
start-up operation.
This program starts up the postmaster and exits.
The net effect of performing the operation in this manner is that the
Windows service manager sees the service as "not running" a few minutes
after the startup is complete. It also prevents proper pause and
restart of the service.
As a suggestion:
Instead of installing pg_ctl as the service, start up postgres as the
service. This is how we did our Windows port. If the idea is appealing
to the PostgreSQL group, we can send our service code modifications for
review as a possible alternative to the current method.
Another approach that could be equally helpful (along the same lines) is
to leave pg_ctl.exe in memory and allow it to control the program.