无法启动用Python编写的Windows服务(win32serviceutil)

我正在尝试启动一个简单的服务示例:

someservice.py:

import win32serviceutil import win32service import win32event class SmallestPythonService(win32serviceutil.ServiceFramework): _svc_name_ = "SmallestPythonService" _svc_display_name_ = "display service" def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) def SvcDoRun(self): win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) if __name__=='__main__': win32serviceutil.HandleCommandLine(SmallestPythonService) 

当我跑步

 python someservice.py install 

一切正常,服务出现在Windows服务列表中,但

 python someservice.py start 

错误1053:服务没有及时响应启动或控制请求“,但没有任何延迟。

pythonservice.exe了一个解决scheme,这表示它发生时, pythonservice.exe无法findpythonservice.exe 。 它实际上不能,所以我将C:\Python27添加到PATH 。 现在pythonservice.exe运行正常,但错误1053仍然存在。

我运行Python 2.7.2与Windows 7旗舰版上的pywin32 216pipe理员权限。

另外,感谢指出它可能是一个DLL问题,这导致我找到正确的解决方案。

你需要做的是将Python27添加到SYSTEM PATH,而不是添加到USER PATH,因为默认情况下python服务将被安装为一个“LocalSystem”,所以当它试图启动时使用SYSTEM PATH变量 – 这就是为什么你可以从命令提示符运行它,你的用户路径是正确的。

希望能帮助到你!

我相信如果你改变方法SvcDoRun你的问题将被修复

  def SvcDoRun(self): win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) 

  def SvcDoRun(self): self.ReportServiceStatus(win32service.SERVICE_RUNNING) win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) 

另一个有用的提示是添加以下行

sys.frozen = 'windows_exe' # Fake py2exe so we can debug

在你打电话之前

win32serviceutil.HandleCommandLine(...)

这样你就可以从错误的服务中获得更多有用的信息。