Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1ab7dc0

Browse files
committed
Support running as a service on Windows 7, by not specifying
the JOB_OBJECT_UILIMIT_HANDLES flag.Dave Page & Magnus Hagander
1 parent6b73366 commit1ab7dc0

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

‎src/bin/pg_ctl/pg_ctl.c

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*
55
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
66
*
7-
* $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.107 2009/01/15 22:33:19 petere Exp $
7+
* $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.108 2009/01/28 11:19:37 mha Exp $
88
*
99
*-------------------------------------------------------------------------
1010
*/
@@ -121,7 +121,7 @@ static void pgwin32_SetServiceStatus(DWORD);
121121
staticvoidWINAPIpgwin32_ServiceHandler(DWORD);
122122
staticvoidWINAPIpgwin32_ServiceMain(DWORD,LPTSTR*);
123123
staticvoidpgwin32_doRunAsService(void);
124-
staticintCreateRestrictedProcess(char*cmd,PROCESS_INFORMATION*processInfo);
124+
staticintCreateRestrictedProcess(char*cmd,PROCESS_INFORMATION*processInfo,boolas_service);
125125

126126
staticSERVICE_STATUSstatus;
127127
staticSERVICE_STATUS_HANDLEhStatus= (SERVICE_STATUS_HANDLE)0;
@@ -385,7 +385,7 @@ start_postmaster(void)
385385
snprintf(cmd,MAXPGPATH,"CMD /C "SYSTEMQUOTE"\"%s\" %s%s < \"%s\" 2>&1"SYSTEMQUOTE,
386386
postgres_path,pgdata_opt,post_opts,DEVNULL);
387387

388-
if (!CreateRestrictedProcess(cmd,&pi))
388+
if (!CreateRestrictedProcess(cmd,&pi, false))
389389
returnGetLastError();
390390
CloseHandle(pi.hProcess);
391391
CloseHandle(pi.hThread);
@@ -1210,7 +1210,7 @@ pgwin32_ServiceMain(DWORD argc, LPTSTR * argv)
12101210

12111211
/* Start the postmaster */
12121212
pgwin32_SetServiceStatus(SERVICE_START_PENDING);
1213-
if (!CreateRestrictedProcess(pgwin32_CommandLine(false),&pi))
1213+
if (!CreateRestrictedProcess(pgwin32_CommandLine(false),&pi, true))
12141214
{
12151215
pgwin32_SetServiceStatus(SERVICE_STOPPED);
12161216
return;
@@ -1313,7 +1313,7 @@ typedefBOOL(WINAPI * __QueryInformationJobObject) (HANDLE, JOBOBJECTINFOCLASS,
13131313
* automatically destroyed when pg_ctl exits.
13141314
*/
13151315
staticint
1316-
CreateRestrictedProcess(char*cmd,PROCESS_INFORMATION*processInfo)
1316+
CreateRestrictedProcess(char*cmd,PROCESS_INFORMATION*processInfo,boolas_service)
13171317
{
13181318
intr;
13191319
BOOLb;
@@ -1449,6 +1449,7 @@ CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION * processInfo)
14491449
JOBOBJECT_BASIC_LIMIT_INFORMATIONbasicLimit;
14501450
JOBOBJECT_BASIC_UI_RESTRICTIONSuiRestrictions;
14511451
JOBOBJECT_SECURITY_LIMIT_INFORMATIONsecurityLimit;
1452+
OSVERSIONINFOosv;
14521453

14531454
ZeroMemory(&basicLimit,sizeof(basicLimit));
14541455
ZeroMemory(&uiRestrictions,sizeof(uiRestrictions));
@@ -1459,8 +1460,23 @@ CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION * processInfo)
14591460
_SetInformationJobObject(job,JobObjectBasicLimitInformation,&basicLimit,sizeof(basicLimit));
14601461

14611462
uiRestrictions.UIRestrictionsClass=JOB_OBJECT_UILIMIT_DESKTOP |JOB_OBJECT_UILIMIT_DISPLAYSETTINGS |
1462-
JOB_OBJECT_UILIMIT_EXITWINDOWS |JOB_OBJECT_UILIMIT_HANDLES |JOB_OBJECT_UILIMIT_READCLIPBOARD |
1463+
JOB_OBJECT_UILIMIT_EXITWINDOWS |JOB_OBJECT_UILIMIT_READCLIPBOARD |
14631464
JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS |JOB_OBJECT_UILIMIT_WRITECLIPBOARD;
1465+
1466+
if (as_service)
1467+
{
1468+
osv.dwOSVersionInfoSize=sizeof(osv);
1469+
if (!GetVersionEx(&osv)||
1470+
osv.dwMajorVersion<6||
1471+
(osv.dwMajorVersion==6&&osv.dwMinorVersion==0))
1472+
{
1473+
/*
1474+
* On Windows 7 (and presumably later), JOB_OBJECT_UILIMIT_HANDLES prevents us from
1475+
* starting as a service. So we only enable it on Vista and earlier (version <= 6.0)
1476+
*/
1477+
uiRestrictions.UIRestrictionsClass |=JOB_OBJECT_UILIMIT_HANDLES;
1478+
}
1479+
}
14641480
_SetInformationJobObject(job,JobObjectBasicUIRestrictions,&uiRestrictions,sizeof(uiRestrictions));
14651481

14661482
securityLimit.SecurityLimitFlags=JOB_OBJECT_SECURITY_NO_ADMIN |JOB_OBJECT_SECURITY_ONLY_TOKEN;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp