如何解决启动使用pyinstaller编译的python Windows服务时出错
我已经创建了Windows服务的python脚本。下面是代码:
client_service.py
import logging
import os
import sys
import psutil
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import time
import json
import datetime
from random import randint
from pymongo import MongoClient
from opcua import Client
curr_path = os.path.dirname(os.path.abspath(__file__))
configs_path = os.path.join(curr_path,'configs','app_config.json')
opc_configs_path = os.path.join(curr_path,'opc.json')
log_file_path = os.path.join(curr_path,'logs','application.log')
def setup_logger(logger_name,log_file,level=logging.ERROR):
l = logging.getLogger(logger_name)
formatter = logging.Formatter('%(asctime)s %(message)s')
fileHandler = logging.FileHandler(log_file,mode='a')
fileHandler.setFormatter(formatter)
streamHandler = logging.StreamHandler()
streamHandler.setFormatter(formatter)
l.setLevel(level)
l.addHandler(fileHandler)
l.addHandler(streamHandler)
debug_file = os.path.join(curr_path,'application.log')
setup_logger('debug',debug_file)
log_debug = logging.getLogger('debug')
class AppService(win32serviceutil.ServiceFramework):
_svc_name_ = "OPC_CLIENT_SERVICE"
_svc_display_name_ = "OPC_CLIENT_SERVICE"
_svc_description_ = "OPC_CLIENT_SERVICE"
def __init__(self,args):
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None,None)
socket.setdefaulttimeout(60)
self.isrunning = False
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
self.isrunning = False
def SvcDoRun(self):
self.isrunning = True
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,servicemanager.PYS_SERVICE_STARTED,(self._svc_name_,''))
log_debug.error("STARTED")
while self.isrunning:
log_debug.error("Running")
time.sleep(2)
if __name__ == '__main__':
if len(sys.argv) == 1:
servicemanager.Initialize()
servicemanager.PrepareToHostSingle(AppService)
servicemanager.StartServiceCtrlDispatcher()
else:
win32serviceutil.HandleCommandLine(AppService)
要测试它,我在命令下面运行:
> python client_service.py install
Installing service OPC_CLIENT_SERVICE
Service installed
> python client_service.py debug
Debugging service OPC_CLIENT_SERVICE - press Ctrl+C to stop.
Info 0x40001002 - The OPC_CLIENT_SERVICE service has started.
2020-09-23 21:15:46,603 STARTED
2020-09-23 21:15:46,603 Running
2020-09-23 21:15:48,604 Running
2020-09-23 21:15:50,606 Running
Stopping debug service.
> python client_service.py start
Starting service OPC_CLIENT_SERVICE
> python client_service.py remove
Removing service OPC_CLIENT_SERVICE
Service removed
一切正常,这意味着脚本没有问题。后来我使用.py
将.exe
转换为pyinstaller
:
pyinstaller --hiddenimport=win32timezone --onefile client_service.py
此后,它创建了client_service.exe
。因此,我使用了以下命令:
> client_service.exe install
Installing service OPC_CLIENT_SERVICE
Service installed
> client_service.exe debug
Debugging service OPC_CLIENT_SERVICE - press Ctrl+C to stop.
Info 0x40001002 - The OPC_CLIENT_SERVICE service has started.
2020-09-23 21:23:35,149 STARTED
2020-09-23 21:23:35,149 Running
2020-09-23 21:23:37,150 Running
2020-09-23 21:23:39,150 Running
Stopping debug service.
> client_service.exe start
Starting service OPC_CLIENT_SERVICE
Error starting service: The service did not respond to the start or control request in a timely fashion.
在这里,我无法理解为什么exe无法启动。我如何从这里调试它。请任何人都可以告诉我如何调试它。有什么建议。?请帮忙。谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。