【问题标题】:Python Windows service executable runs only in Debug, not in StartPython Windows 服务可执行文件仅在 Debug 中运行,而不在 Start 中运行
【发布时间】:2019-06-06 13:10:28
【问题描述】:

我正在尝试使用 python 制作 Windows 服务,并使用 this 服务示例启动。作为一个脚本它工作,它被安装,它在给定开始标志时运行。但是出于可移植性的原因,我想创建一个可以运行服务的可执行文件,所以我使用 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 标志并且我不知道为什么时才有效。使用 Start 标志时,它什么也不做,如果我尝试从 Windows 服务启动它,我会得到“服务没有及时响应启动或控制请求”。错误。

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

如果您认为我错过了什么,请分享!

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

更新:

如果这会给你一个线索:在运行脚本(安装/启动/停止)时,我会收到一些反馈,例如“正在安装服务”或“正在启动服务”。当我运行可执行文件时,我没有收到这样的反馈。

【问题讨论】:

  • 您使用的是哪个版本的cx_Freeze
  • 我使用的是 5.1.1

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


【解决方案1】:

请查看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 构建)也很有用。

【讨论】:

  • 我刚刚尝试了 pyinstaller 解决方案,我得到了完全相同的结果:使用 Start 时出现错误 1053,使用 Debug 时启动。使用base='Win32Service' 会呈现错误“程序无法启动,因为您的计算机中缺少 cx_Logging.cp36-win_amd64.pyd。请尝试重新安装程序以解决此问题”。
  • @Bibushka 我猜 ZachM 对this answer 的评论可能会有所帮助。
  • 好吧,现在什么都没有发生。我使用带有 cx_Freeze 的 Win32Service 基础,甚至无法安装该服务。我用的是pyinstaller,它已经安装了,但启动时再次报错1053,但在使用Debug时启动。
  • 好吧,我不知道我还能提供什么帮助,抱歉。你看过Microsoft hotfixthis thread吗?
  • 在搜索从 python 代码构建的 Windows 服务时,我已经尝试了几乎所有谷歌吐出的东西。我尝试记录可执行文件在启动模式下运行时执行的步骤,它在“win32serviceutil.py”文件中的这一行hscm = win32service.OpenSCManager(machine,None,win32service.SC_MANAGER_ALL_ACCESS) 处停止。我无法进一步研究代码,因为函数的签名是未知的。也许这是进一步的线索?我现在只是不知所措,我正在尝试一切和任何事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 2016-12-21
  • 1970-01-01
  • 2020-05-19
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多