我正在尝试使用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。
更新:
如果这可以为您提供线索:运行脚本(安装/启动/停止)时,我会收到诸如“安装服务”或“启动服务”之类的反馈。当我运行可执行文件时,没有得到任何反馈。
答案 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
构建)也很有用。