我想在python中編寫一個windows服務,但棘手的部分是我想將它部署在沒有python的機器上。 我已經成功創建了一個像this這樣的服務,如果我從我的機器上運行,它就可以工作。該問題開始時,我嘗試將其轉換爲exe,然後嘗試安裝它。 首先我試圖用cx_freeze服務例如,(看到here)中,setup.py是這樣的:作爲Windows服務的Python 3可執行文件
from cx_Freeze import setup, Executable
options = {'build_exe': {'includes': ['ServiceHandler']}}
executables = [Executable('Config.py', base='Win32Service', targetName='gsr.exe')]
setup(name='GSR',
version='0.1',
description='GSR SERVICE',
executables=executables,
options=options
)
和config.py是:
NAME = 'GSR_%s'
DISPLAY_NAME = 'GSR TEST - %s'
MODULE_NAME = 'ServiceHandler'
CLASS_NAME = 'Handler'
DESCRIPTION = 'Sample service description'
AUTO_START = True
SESSION_CHANGES = False
,但是當我嘗試建立它(蟒蛇setup.py版本)我得到一個錯誤: 「cx_Freeze.freezer.ConfigError:沒有名爲Win32Service基地」
其次,我試圖用一個普通cx_freeze設置,該exe我得到安裝服務不錯,但一旦我嘗試啓動它,我得到一個錯誤或: 「錯誤1053:沒有及時到開始或控制請求服務」
setup.py - 蟒蛇3.3 regualr exe文件,安裝服務,但試圖啓動時,它發送一個錯誤:
from cx_Freeze import setup, Executable
packages = ['win32serviceutil','win32service','win32event','servicemanager','socket','win32timezone','cx_Logging','ServiceHandler']
build_exe_options = {"packages": packages}
executable = [Executable("ServiceHandler.py")]
setup( name = "GSR_test",
version = "1.0",
description = "GSR test service",
options = {"build_exe": build_exe_options},
executables = executable)
最後,我設法得到它在Python 2.7工作中使用py2exe,但py2exe不適用於Python 3.3和我在我的代碼是在3.3
我想這個問題是在配置與cx_freeze一起使用的setup.py。 有什麼想法?
我的ServiceHandler:
import pythoncom
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
from test import test
import threading
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "GSR_test"
_svc_display_name_ = "GSR test Service"
def __init__(self,args):
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)
socket.setdefaulttimeout(60)
self.app = test()
self.flag = threading.Event()
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
self.flag.set()
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,''))
self.main()
def main(self):
t = threading.Thread(target=self.app.run)
t.start()
self.flag.wait()
raise SystemExit
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(AppServerSvc)
Setup.py,蟒蛇2.7使用py2exe的作品:(從here拍攝)
from distutils.core import setup
import py2exe
setup( service = ["ServiceHandler"],
description = "SERVICE TEST",
modules = ["GSR_test"],
cmdline_style='pywin32',)
感謝, 阿米特
什麼不起作用?是否有任何記錄錯誤? – TAS
我更新了問題幷包含更多詳細信息 – AmitE
Win32service base目前僅支持Python 2。它正在等待某人添加Python 3支持。 –