我正在调用一个PHP函数来访问Windows 7服务的状态,如下所示:
win32_query_service_status($service_name);
在本地安装的WAMP实例下运行时,该函数会返回一个预期的信息数组。
在IIS下运行时,我得到了一个错误状态码5,根据文档,这对应以下错误:
WIN32_ERROR_ACCESS_DENIED 0x00000005
The handle to the SCM database does not have the appropriate access rights.
因此,我使用
phpinfo()
来检查 PHP 环境正在运行的用户名。在 WAMP 站点上,服务正在使用我的用户 ID(该用户属于 Windows 本地管理员组)运行。在 IIS 版本下,该用户为
F6729-44TP6S7$
(这是我的计算机名称,后跟一个 $
)。因此,解决方案可能就是在 Windows 的服务控制管理器(SCM)上授予该用户必要的权限。问题在于,我不了解 IIS(或 Windows)的内部工作原理,不知道该用户 ID 是从哪里来的(这意味着我不知道如何授予它所需的权限)。该用户不存在于我的计算机管理控制台中,我也找不到它在 IIS 管理工具中的定义位置。 因此问题是:我需要做什么才能让此 PHP 函数在 IIS 下运行?如何为 IIS 下的 PHP 管理器授予必要的权限?或者,如何更改 PHP 管理器运行的用户 ID?
SC.exe
)来授予特定用户/组的权限。你可以使用sc sdshow
获取当前的 SSDL,然后使用添加的权限进行sc sdset
。根据你要做什么,查询一个服务可能只需要访问scmanager
的权限:sc sdset scmanager (SSDL)
。http://technet.microsoft.com/en-us/library/cc742037%28v=ws.10%29.aspx - JoeBilly