2011-04-17 60 views
0

我需要一些使用py2exe来转换python windows服务的帮助。使用Python和py2exe的Windows服务

让我来解释一下这个问题。我有一个python服务,可以工作,这里没有问题。我用py2exe把它变成一个可执行文件。我通过用这个替换了python版本的服务来测试它,它也没有问题。

但是,当我将服务的exe版本移动到另一台计算机时,它将向服务管理器注册,但不会以错误开始:“系统找不到指定的文件”。缺少的文件是我编写的模块之一。

我玩了这一点,并回到我使用py2exe和该服务的exe版本工作的机器。我删除了一切相关的python,py2exe创建的所有东西,但“dist”文件夹,我能想到的所有东西都与python版本的服务有关。 exe文件仍然有效(即使我删除了其他机器上应该丢失的文件)。

尝试了一堆不同的东西,但无法获得exe版本的工作。如果你们有任何想法,我会很感激。

P.S:我确实在目标机器上安装了C++运行库。没有它就无法注册服务,正如我所说,我可以注册它,它不会运行。

+0

不太熟悉如何在Windows上运行,但在Linux上您可以针对二进制运行“ldd”以查看它依赖于哪些动态库以及它们在文件系统上的位置。这将是值得检查。事实上,我做了一个快速谷歌搜索,并发现这个Windows的:http://dependencywalker.com/ – 2011-04-17 12:36:28

回答

0

http://www.py2exe.org/index.cgi/py2exeAndWindowsServices

有一些注意事项在那里有关模块与Windows系统DLL冲突。他有一个问题,因为他有一个名为版本的模块,并且import version导致该应用程序出错。

您可以尝试导入win32traceutil作为您服务中的第一件事。这应该允许您运行win32traceutil控制台应用程序以显示服务的任何stdout/stderr输出。

1

即使您将.py脚本转换为exe,该服务仍然使用python解释器来运行服务代码本身。如果你打开“服务”,并期待在服务属性,你应该看到类似 - 路径可执行文件: “C:\ Python27 \ LIB \站点包\ WIN32 \ PythonService.exe”

我猜另一台电脑没有安装python。 如果你想能够运行的机器上的服务,而无需安装Python,你需要做这样的事情This ,或者你也可以做到这一点使用cx_freeze