@@ -121,6 +121,7 @@ static void WINAPI pgwin32_ServiceMain(DWORD, LPTSTR *);
121
121
static void pgwin32_doRunAsService (void );
122
122
static int CreateRestrictedProcess (char * cmd , PROCESS_INFORMATION * processInfo , bool as_service );
123
123
124
+ static DWORD pgctl_start_type = SERVICE_AUTO_START ;
124
125
static SERVICE_STATUS status ;
125
126
static SERVICE_STATUS_HANDLE hStatus = (SERVICE_STATUS_HANDLE ) 0 ;
126
127
static HANDLE shutdownHandles [2 ];
@@ -1163,8 +1164,8 @@ pgwin32_doRegister(void)
1163
1164
}
1164
1165
1165
1166
if ((hService = CreateService (hSCM , register_servicename , register_servicename ,
1166
- SERVICE_ALL_ACCESS , SERVICE_WIN32_OWN_PROCESS ,
1167
- SERVICE_AUTO_START , SERVICE_ERROR_NORMAL ,
1167
+ SERVICE_ALL_ACCESS , SERVICE_WIN32_OWN_PROCESS ,
1168
+ pgctl_start_type , SERVICE_ERROR_NORMAL ,
1168
1169
pgwin32_CommandLine (true),
1169
1170
NULL , NULL , "RPCSS\0" , register_username , register_password )) == NULL )
1170
1171
{
@@ -1603,7 +1604,7 @@ do_help(void)
1603
1604
printf (_ (" %s kill SIGNALNAME PID\n" ), progname );
1604
1605
#if defined(WIN32 ) || defined(__CYGWIN__ )
1605
1606
printf (_ (" %s register [-N SERVICENAME] [-U USERNAME] [-P PASSWORD] [-D DATADIR]\n"
1606
- " [-w] [-t SECS] [-o \"OPTIONS\"]\n" ), progname );
1607
+ " [-S START-TYPE] [- w] [-t SECS] [-o \"OPTIONS\"]\n" ), progname );
1607
1608
printf (_ (" %s unregister [-N SERVICENAME]\n" ), progname );
1608
1609
#endif
1609
1610
@@ -1644,6 +1645,11 @@ do_help(void)
1644
1645
printf (_ (" -N SERVICENAME service name with which to register PostgreSQL server\n" ));
1645
1646
printf (_ (" -P PASSWORD password of account to register PostgreSQL server\n" ));
1646
1647
printf (_ (" -U USERNAME user name of account to register PostgreSQL server\n" ));
1648
+ printf (_ (" -S START-TYPE service start type to register PostgreSQL server\n" ));
1649
+
1650
+ printf (_ ("\nStart types are:\n" ));
1651
+ printf (_ (" auto start service automatically during system startup (default)\n" ));
1652
+ printf (_ (" demand start service on demand\n" ));
1647
1653
#endif
1648
1654
1649
1655
printf (_ ("\nReport bugs to <pgsql-bugs@postgresql.org>.\n" ));
@@ -1708,10 +1714,26 @@ set_sig(char *signame)
1708
1714
do_advice ();
1709
1715
exit (1 );
1710
1716
}
1711
-
1712
1717
}
1713
1718
1714
1719
1720
+ #if defined(WIN32 ) || defined(__CYGWIN__ )
1721
+ static void
1722
+ set_starttype (char * starttypeopt )
1723
+ {
1724
+ if (strcmp (starttypeopt , "a" ) == 0 || strcmp (starttypeopt , "auto" ) == 0 )
1725
+ pgctl_start_type = SERVICE_AUTO_START ;
1726
+ else if (strcmp (starttypeopt , "d" ) == 0 || strcmp (starttypeopt , "demand" ) == 0 )
1727
+ pgctl_start_type = SERVICE_DEMAND_START ;
1728
+ else
1729
+ {
1730
+ write_stderr (_ ("%s: unrecognized start type \"%s\"\n" ), progname , starttypeopt );
1731
+ do_advice ();
1732
+ exit (1 );
1733
+ }
1734
+ }
1735
+ #endif
1736
+
1715
1737
1716
1738
int
1717
1739
main (int argc , char * * argv )
@@ -1789,7 +1811,7 @@ main(int argc, char **argv)
1789
1811
/* process command-line options */
1790
1812
while (optind < argc )
1791
1813
{
1792
- while ((c = getopt_long (argc , argv , "cD:l:m:N:o:p:P:st :U:wW" , long_options , & option_index )) != -1 )
1814
+ while ((c = getopt_long (argc , argv , "cD:l:m:N:o:p:P:sS:t :U:wW" , long_options , & option_index )) != -1 )
1793
1815
{
1794
1816
switch (c )
1795
1817
{
@@ -1836,6 +1858,15 @@ main(int argc, char **argv)
1836
1858
case 's' :
1837
1859
silent_mode = true;
1838
1860
break ;
1861
+ case 'S' :
1862
+ #if defined(WIN32 ) || defined(__CYGWIN__ )
1863
+ set_starttype (optarg );
1864
+ #else
1865
+ write_stderr (_ ("%s: -S option not supported on this platform\n" ),
1866
+ progname );
1867
+ exit (1 );
1868
+ #endif
1869
+ break ;
1839
1870
case 't' :
1840
1871
wait_seconds = atoi (optarg );
1841
1872
break ;
@@ -1944,8 +1975,7 @@ main(int argc, char **argv)
1944
1975
if (pg_data == NULL &&
1945
1976
ctl_command != KILL_COMMAND && ctl_command != UNREGISTER_COMMAND )
1946
1977
{
1947
- write_stderr (_ ("%s : no database directory specified "
1948
- "and environment variable PGDATA unset \n "),
1978
+ write_stderr (_ ("%s : no database directory specified and environment variable PGDATA unset \n "),
1949
1979
progname );
1950
1980
do_advice ();
1951
1981
exit (1 );
0 commit comments