Python有一个win32service
包,似乎允许Windows服务创build。 我仔细检查了可用的谷歌示例,例如这一个: 是否有可能在Windows中运行Python脚本作为服务? 如果可能,如何?
我已经将代码放入~/Documents/test.py
并在提升的命令提示符下执行:
> python test.py install > python test.py debug
不幸的是,我试过的每一个例子都失败了,
Debugging service TestService - press Ctrl+C to stop. Error 0xC0000005 - Python could find the service class in the module AttributeError: 'module' object has no attribute 'AppServerSvc' (null): (null)
我已经在Windows 7 64位和Windows 8 64位上使用最新版本的ActivePython(2.7.2.5 32位)进行了testing。 当然,如果服务是通过服务pipe理器主动启动的,它也不会启动。
我做错了什么或Python是不是打算用于现代操作系统上的服务创build? 也许我需要一个特定版本的Windows / python / pywin32? 当然,我可以手动testing从Windows XP开始的所有组合,但它会花费很多时间:(也许有人已经有Python和Windows服务的经验,可以暗示我我做错了什么?
更新
testing在Windows XP 32位虚拟macine(相同的代码,相同的activepython分布) – 相同的错误。
看来在PyWin32的ActiveState版本中有一个错误。 安装ActiveState的python 2.7.2.5并运行上面的链接的示例代码,我得到了同样的错误,你正在报告。
但是,如果我下载Python 2.7.3 (2.7.2.5似乎没有可用的下载),并添加PyWin32建立214 (ActiveState似乎是使用PyWin32的214版本)。 那么一切似乎工作得很好。 我也尝试了最新版本的PyWin32(218),它也正常工作。
所以我想你可以尝试向ActiveState报告问题(我没有与他们的支持合同),除非你有使用ActiveState的要求,你可以切换到标准的Python构建。
我一直使用标准的Python构建多年的服务运行在从Windows 2000到server 2008和Windows 7的一切,没有任何问题。 所以我有充分的理由相信它也适用于你。
如果你想使用ActiveState来解决这个问题,那么这个bug在LoadPythonServiceInstance函数的PythonService.cpp版本中出现。 我查看了创建的注册表项,它们看起来很好,它是加载你的类失败的PythonService.exe。 根据错误信息,它似乎已经正确加载了模块,并且在找到这个类时遇到了麻烦。