Python Windows服务可执行文件仅在调试中运行,而不在开始中运行

时间:2019-01-11 15:28:01

标签: python-3.x windows service cx-freeze

我正在尝试使用python提供Windows服务,并以this服务示例开始。作为脚本,它可以工作,可以安装,并在给与Start标志的情况下运行。但是出于可移植性的原因,我想创建一个可以从中运行服务的可执行文件,因此我使用了 cx_Freeze (下面的代码-我知道那里有一些额外的程序包,但是那没有不会影响流程,或者至少我不这么认为)。

from cx_Freeze import setup, Executable
import os
import sys

PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')
base = None
if sys.platform == "win32":
    base = "Win32GUI"


executables = [Executable(script="PythonCornerExample.py",
               targetName="PythonCornerExample.exe", base=base)]

packages = ["time", "datetime", "os", "sqlite3", "win32timezone"]

options = {
    'build_exe': {
        'packages':packages,
        'include_files': [
            os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
            os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll')
         ],
    },
}

setup(
    name = "PythonCornerExample",
    options = options,
    description = 'Bla bla',
    executables = executables
)

使用新的可执行文件运行服务现在仅在使用Debug标志并且不知道原因的情况下才有效。使用“开始”标志时,它没有任何作用,如果尝试从Windows服务启动它,则会收到“该服务未及时响应启动或控制请求的信息。”错误。

我已将可执行文件的路径添加到系统变量中的PATH中,以管理员身份运行cmd,已将pythoncom36.dll从pywin32_system32文件夹复制到python站点包中的win32文件夹,并向注册表中的用户授予了权限编辑器。

如果您认为我错过了任何事情,请分享!

我正在Windows7上运行python3.6,并且正在使用cx_Freeze 5.1.1。

更新:

如果这可以为​​您提供线索:运行脚本(安装/启动/停止)时,我会收到诸如“安装服务”或“启动服务”之类的反馈。当我运行可执行文件时,没有得到任何反馈。

1 个答案:

答案 0 :(得分:0)

请查看cx_Freeze Windows service sample:您似乎必须使用base='Win32Service'以及其他项目结构。

您可能仍需要进行一些其他修改才能使其与Python 3配合使用,请参见Python 3 executable as windows service

编辑:也许这:Having several issues with a Python service for Windows(用pyinstaller构建)也很有用。