python打包exe,并发布windows服务实践

操作实践

1、编写python程序,按照自己的需求编写

以下是案例

# -*- coding:utf-8 -*-
import win32serviceutil
import win32service
import win32event
import win32timezone     #不加导入,打包后运行会报错,原因未知,暂时不去刨根
from flask import Flask
from flask import request
import sys
import os

#windows服务中显示的名字
class kqsService(win32serviceutil.ServiceFramework):
    _svc_name_ = 'kqs_agent' 
    _svc_display_name_ = 'kqs_agent'  
    _svc_description_ = 'kqs_agent'  


    def __init__(self,args):
        win32serviceutil.ServiceFramework.__init__(self,args)
        self.stop_event = win32event.CreateEvent(None, 0, 0, None)
        self.run = True

    def SvcDoRun(self):
        app = Flask(__name__)
        #测试路由,用来测试agent是否正在运行,返回ok表示正在运行
        @app.route('/', methods=['GET', 'POST'])
        def test():
            if request.method == "GET":
                return "ok"

        app.run(host='0.0.0.0', port=50000)

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.stop_event)
        self.ReportServiceStatus(win32service.SERVICE_STOPPED)
        self.run = False

if __name__ == '__main__':
    import sys
    import servicemanager
    if len(sys.argv) == 1:
        try:
            evtsrc_dll = os.path.abspath(servicemanager.__file__)
            servicemanager.PrepareToHostSingle(kqsService) 
            servicemanager.Initialize('kqsService',evtsrc_dll) 
            servicemanager.StartServiceCtrlDispatcher()
        except win32service.error as details:
            import winerror
            if details == winerror.ERROR_FAILED_SERVICE_CONTROLLER_CONNECT:
                win32serviceutil.usage()
    else:
        win32serviceutil.HandleCommandLine(kqsService) 

2、通过pip install pyinstaller 指令安装pyinstaller ,运行pyinstaller -F .\serve.py

3、提取exe文件至目标服务器,用管理员权限运行powershell,输入指令 .\serve.exe install

4、成功之后在系统服务中可以找到自己命名的服务,选择开机自启即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lawliet1217

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值