【发布时间】: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