小能豆

Python windows服务“启动服务时出错:服务没有及时响应启动或控制请求”

python

我正在正常命令提示符下通过python win_service.py install运行下面的代码,出现访问被拒绝错误。

安装服务 TestService

安装服务时出错:访问被拒绝。 (5)

当我以管理员身份启动命令提示符时,我能够解决这个问题。

我能够安装该服务,但无法启动该服务。

已安装服务

启动服务TestService

启动服务时出错:服务未及时响应启动或控制请求。

import win32serviceutil
import win32service
import win32event
import servicemanager
import socket

class AppServerSvc (win32serviceutil.ServiceFramework):
    _svc_name_ = "TestService"
    _svc_display_name_ = "Test Service"

    def __init__(self,args):
        win32serviceutil.ServiceFramework.__init__(self,args)
        self.hWaitStop = win32event.CreateEvent(None,0,0,None)
        socket.setdefaulttimeout(60)

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)

    def SvcDoRun(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,
                              (self._svc_name_,''))
        self.main()

    def main(self):
        print "running"

if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(AppServerSvc)

做错了什么,是否有其他方法来安装可以解决问题的服务以及如何以管理员身份动态运行它。


阅读 103

收藏
2024-05-14

共1个答案

小能豆

在Windows中,安装和启动服务通常需要管理员权限。你已经正确地通过以管理员身份启动命令提示符来解决了安装服务时的访问被拒绝的问题。但是,即使以管理员身份启动了命令提示符,你可能仍然会遇到启动服务时的问题。

启动服务时出现“服务未及时响应启动或控制请求”的错误通常是因为服务启动所需的时间超出了系统的预期时间。这可能是由于服务启动时发生了阻塞或延迟的操作,导致系统认为服务未响应。

为了解决这个问题,你可以尝试通过修改服务的启动类型来延迟启动服务,或者调整你的服务代码,确保在 SvcDoRun 方法中的操作不会阻塞或延迟太长时间。

另外,如果你想以动态方式以管理员身份运行你的Python脚本,你可以使用 runas 命令来创建一个批处理脚本,并以管理员身份运行它,就像我之前提到的一样。这样可以确保你的Python脚本以管理员权限运行,从而避免了需要手动以管理员身份启动命令提示符的步骤。

2024-05-14