5

Python 有一个win32service似乎允许创建 Windows 服务的包。我已经仔细检查了可用的谷歌示例,例如这个: Is it possible to run a Python script as a service in Windows? 如果可能,怎么做?

我已将代码放入~/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 位)对其进行了测试。当然,如果服务是通过服务管理器手动启动的,它也不会启动。

我做错了什么还是 Python 不打算用于现代操作系统上的服务创建?也许我需要特定版本的 windows/python/pywin32?当然,我可以从 Windows XP 开始手动测试所有组合,但这需要很多时间:(。也许有人已经有 Python 和 Windows 服务的经验,可以提示我我做错了什么?

更新

在 Windows XP 32 位虚拟机上测试(相同的代码,相同的 activepython 发行版) - 相同的错误。

4

1 回答 1

1

PyWin32 的 ActiveState 构建中似乎存在错误。安装 ActiveState python 2.7.2.5 并运行上面链接的示例代码,我得到了与您报告的相同的错误。

但是如果我下载Python 2.7.3(2.7.2.5 似乎无法下载)并添加PyWin32 build 214(ActiveState 似乎使用的是 PyWin32 的 214 版本)。然后一切似乎都很好。我还尝试了最新版本的 PyWin32 (218),它也可以正常工作。

所以我想你可以尝试向 ActiveState 报告问题(我没有与他们签订支持合同),除非你有使用 ActiveState 的要求,否则你可以切换到标准的 Python 版本。

多年来,我一直在使用标准 Python 构建的服务,在从 Windows 2000 到 Server 2008 和 Windows 7 的所有设备上运行,没有任何问题。所以我有充分的理由相信它也对你有用。

如果您想使用 ActiveState 来解决问题,那么该错误似乎出现在 LoadPythonServiceInstance 函数中的 PythonService.cpp 构建中。我查看了创建的注册表项,它们看起来很好,是 PythonService.exe 无法加载您的类。根据错误消息,它似乎已经正确加载了模块,只是找不到类。

于 2012-11-04T20:15:48.657 回答