1

如果我尝试通过 win32service.OpenService()(以管理员身份运行)控制甚至打开一些具有所有访问权限的服务,我会收到“pywintypes.error: (5, 'OpenService', 'Access is denied.')”。但是,从服务控制台控制相同的服务是成功的。这是为什么?这是复制问题的示例代码:

import win32service as ws


def get_handle(service_name):
    # service_name is the internal service name, not the display name.
    hSCManager = ws.OpenSCManager(None, None, ws.SC_MANAGER_ALL_ACCESS)
    return ws.OpenService(hSCManager, service_name, ws.SERVICE_ALL_ACCESS)


sh = get_handle("CertPropSvc")  # Certificate Propagation, same problem with
                                # BitLocker Drive Encryption Service (BDESVC)
4

1 回答 1

1

通过在打开SCM和服务时请求较低的权限来解决问题:

import win32service as ws


def get_handle(service_name):
    # service_name is the internal service name, not the display name.
    # SC_MANAGER_CONNECT is enough.
    hSCManager = ws.OpenSCManager(None, None, ws.SC_MANAGER_CONNECT)
    # SERVICE_CHANGE_CONFIG is enough.
    return ws.OpenService(hSCManager, service_name, ws.SERVICE_CHANGE_CONFIG)


sh = get_handle("CertPropSvc")  # Certificate Propagation, BitLocker Drive
                                # Encryption Service (BDESVC) can also be used.
于 2017-10-15T15:34:40.877 回答