【Python】基于python实现Windows Service程序

文章目录

    • 0 前言
    • 1 代码框架
    • 2 使用方式
    • 3 遇到的问题和解决方案

0 前言

  最近揽了一个小活,就是基于Python设计一个Windows Service程序,和一般应用不同的是,Service直接运行在后台,不会在运行时弹出黑框,因此在设计上和一般的程序有些微差别。因为之前从来没有做过这个,因此做个记录。

1 代码框架

  使用Python写Windows Service,其代码的基本框架是固定的,这也大大方便降低了入门的难度。经过查找资料,加上自己的尝试,总结出如下代码基本结构。

import servicemanager
import sys
import win32event
import win32service
import win32serviceutilclass TestService(win32serviceutil.ServiceFramework):'''这里是一些服务的基本信息, 根据自己需要进行修改'''_svc_name_ = "TestService"_svc_display_name_ = "Test Service"_svc_description_ = "My service description"def __init__(self, args):'''	初始化函数, 服务启动时调用, 可以用来初始化一些变量'''win32serviceutil.ServiceFramework.__init__(self, args)self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)def SvcStop(self):'''停止函数, 服务停止时调用, 可以用来释放资源等操作'''self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)win32event.SetEvent(self.hWaitStop)def SvcDoRun(self):'''运行函数, 服务启动时调用, 可以在这里写你的代码, 注意要是一个死循环'''rc = Nonewhile rc != win32event.WAIT_OBJECT_0:############################################ 这里写你的代码###########################################with open('C:\\TestService.log', 'a') as f:f.write('test service running...\n')rc = win32event.WaitForSingleObject(self.hWaitStop, 5000)def other_function(self):'''其他函数, 可以用于写其他的代码,然后在主线程中调用'''passif __name__ == '__main__':'''服务入口函数, 不用修改'''if len(sys.argv) == 1:servicemanager.Initialize()servicemanager.PrepareToHostSingle(TestService)servicemanager.StartServiceCtrlDispatcher()else:win32serviceutil.HandleCommandLine(TestService)

2 使用方式

  基于上述代码结构,接下来就可以根据自己需要实现的功能写代码了,和其他的开发方式没什么区别,也可以使用多线程。开发完成之后,接下来就是打包程序生成服务了,这里使用到的还是使用最为普遍的pyinstaller模块,打包指令如下

pyinstaller -F --hidden-import=win32timezone .\<文件名>.py

这样就能得到一个执行程序,接下来还需要基于这个执行程序安装,运行,暂停,卸载服务等操作,基本指令如下所示。

# 安装服务
.\dist\<执行文件名>.exe install# 启动服务
.\dist\<执行文件名>.exe start# 停止服务
.\dist\<执行文件名>.exe stop# 卸载服务
.\dist\<执行文件名>.exe remove

到此,基本走完了开发流程,剩下的主要就是功能调试了,比较繁琐,不再赘述。

3 遇到的问题和解决方案

  • 卸载再安装服务显示“指定的服务已标记为删除”
      这是因为在调试过程中打开了服务那个窗口导致的,所以最简单的办法就是强制删除服务之后,重启终端,然后不再在调试过程中打开服务那个窗口,如果还不行,就重启电脑试试。

    实际上我的问题出在代码上面,因为我代码中服务执行部分有socket的accept函数,导致程序是堵塞执行的,所以实际上需要一定的时间这个服务也会自动删除。

  • Updating…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148312.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

LSM-YOLO: A Compact and Effective ROI Detector for Medical Detection

LSM-YOLO: A Compact and Effective ROI Detector for Medical Detection LSM-YOLO: 一种紧凑且有效的医学检测ROI检测器1.介绍2.相关工作2.1医学感兴趣区域&#xff08;ROI&#xff09;检测2.2多尺度特征用于对象检测 3方法3.1LAE(轻量级自适应提取&#xff09;3.2MSFM(多路径…

GESP等级考试C++二级-switch...case的用法

在《GESP等级考试C二级if语句》中提到&#xff0c;可以使用if...else if...else语句来处理多种可能的情况。在C中&#xff0c;使用switch...case语句也可以来处理多种可能。 1 switch...case语句的格式 switch...case语句的格式如图1所示。 图1 switch...case语句的格式 其中…

鸿蒙开发(NEXT/API 12)【基础功能(使用剪贴板进行复制粘贴)】剪贴板服务

场景介绍 [剪贴板]为开发者提供数据的复制粘贴能力。 当需要使用复制粘贴等功能时&#xff0c;例如&#xff1a;复制文字内容到备忘录中粘贴&#xff0c;复制图库照片到文件管理粘贴&#xff0c;就可以通过剪贴板来完成。 约束限制 剪贴板内容大小<128MB。为保证剪贴板数…

【TabBar嵌套Navigation案例-产品推荐页面-UICollectionView-结合xib使用 Objective-C语言】

一、接下来,我们来说这个产品推荐页面 1.首先呢,它是一个CollectionViewController,当我点击这个产品推荐的时候, 这个Cell的时候,我要跳到一个CollectionViewController, 所以呢,我们需要先找到产品推荐,然后给它去添加一个targetVC,然后给它push到一个产品推荐的页面…

AI大模型的前十岗位薪资,谁还说读书没用?零基础入门到精通,收藏这一篇就够了

1. AI系统架构师 薪资范围&#xff1a;100万 - 200万/年 职位要求&#xff1a;需要具备全面的技术背景&#xff0c;精通系统架构设计&#xff0c;能够有效整合AI技术&#xff0c;提升系统性能。要求硕士及以上学历&#xff0c;计算机科学或相关专业背景。 目标院校&#xff1…

使用Conda配置python环境到Pycharm------Window小白版

使用Conda配置python环境到Pycharm 一、Conda安装和环境配置1.1 安装Conda软件1.2 判断是否安装成功1.3 创建Conda虚拟环境 二、 pycharm的安装2.1 Pycharm使用手册2.2 安装pycharm 三、 pycharm导入Conda环境 一、Conda安装和环境配置 anaconda官网 1.1 安装Conda软件 运行…

如何装修阿里巴巴国内1688平台淡入淡出效果首页特效1688店铺装修模板旺铺装修阿里店铺首页怎么装修全阿里

1688运营1688批发首页1688装修模板1688店铺怎么装修模板自定义装修代码1688店铺装修模板旺铺装修阿里店铺首页怎么装修1688店铺装修教程视频全屏通栏代码1688店铺装修模板阿里巴巴店铺装修设计 如何装修阿里巴巴国内1688平台淡入淡出效果首页特效1688店铺装修模板旺铺装修阿里店…

Actions Speak Louder than Words Meta史诗级的端到端推荐大模型落地

发现好久之前整理的推荐系统被遗忘在了草稿箱&#xff0c;让它出来见见世面。。。后续空了持续更新 1.Background 大模型生成用于推荐场景有如下几个难点&#xff1a; 特征缺乏显式结构。存在sparse和dense特征&#xff0c;其中sparse特征指的是一些离散特征&#xff0c;这部…

不再错过任何一个区块!用Node.js + WebSocket轻松实现区块链实时监控

文章目录 前言一、WebSocket是什么&#xff1f;二、项目结构三、代码实现1. 后端实现2. 前端实现 四、启动项目总结 前言 随着区块链技术的发展&#xff0c;实时监控区块链网络中的区块和交易信息变得越来越重要。无论是开发去中心化应用&#xff08;DApp&#xff09;&#xf…

shell脚本(2)

作业&#xff1a; 1.统计家目录下.c文件个数 #!/bin/bash num0 for file in ls ~/*.c do((num)) done echo "家目录中.c文件数:$num" 2定义一个稀疏数组&#xff08;下标不连续&#xff09;&#xff0c;写一个函数求稀疏数组中的和&#xff0c;要求稀疏数组中的数…

p18 docker镜像原理之联合文件系统,p19 docker镜像分层的理解

镜像是什么 镜像其实就是一种轻量级的&#xff0c;可执行的一种软件包&#xff0c;用来打包基于环境开发的软件&#xff0c;里面可以包括代码&#xff0c;环境&#xff0c;数据库&#xff0c;配置文件等信息 如何得到镜像&#xff1f; 可以从镜像仓库下载比方说dockerhub 比…

10种数据库技术的发展历程与现状

数据库是互联网的基石&#xff0c;存储着海量信息&#xff0c;使信息可被高效地组织、检索和分享。没有数据库&#xff0c;网站无法记忆用户数据&#xff0c;应用无法提供个性化服务&#xff0c;信息交流将失去智能与连贯性。因此&#xff0c;数据库技术极大地推动了互联网的发…

多态的使用和原理(c++详解)

一、多态的概念 多态顾名思义就是多种形态&#xff0c;它分为编译时的多态&#xff08;静态多态&#xff09;和运行时的多态&#xff08;动态多态&#xff09;&#xff0c;编译时多态&#xff08;静态多态&#xff09;就是函数重载&#xff0c;模板等&#xff0c;通过不同的参数…

《论软件系统架构风格》写作框架,软考高级系统架构设计师

论文真题 系统架构风格&#xff08;System Architecture Style&#xff09;是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义了一个词汇表和一组约束&#xff0c;词汇表中包含一些构件和连接件类型&#xff0c;而这组约束指出系统是如何将这些构件和连接件组合起…

深度学习训练中的三种网络:监督、半监督和无监督的联系与区别

深度学习训练中&#xff0c;根据训练数据是否有标签&#xff0c;可以将网络分为三大类&#xff1a;监督学习、半监督学习和无监督学习。 目录 一、监督学习网络1.1 特点1.2 典型任务1.3 举例 二、半监督学习网络2.1 特点2.2 典型任务2.3 举例 三、无监督学习网络3.1 特点3.2 典…

两倍多的程序员,不等于两倍多的代码

两倍多的工程师&#xff0c;并不会交付两倍多的代码。为什么很多老板就是想不明白这道理呢&#xff1f;今天这篇文章&#xff0c;咱们就讨论下这事情。 有时候&#xff0c;两件不相关的事情通过一件事情联系起来后&#xff0c;会让我们产生一些非理性想法&#xff0c;甚至相信…

Python自动化-操作Excel

在数据处理和报表生成过程中&#xff0c;Excel是一个经常使用的工具。Python中的openpyxl库可以让您通过编程方式读取、写入和操作Excel文件&#xff0c;从而实现自动化的数据处理和报表生成。本文将介绍openpyxl库的基本用法和常见操作&#xff0c;帮助您快速上手使用Python处…

【android10】【binder】【3.向servicemanager注册服务】

系列文章目录 可跳转到下面链接查看下表所有内容https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501文章浏览阅读2次。系列文章大全https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501 目录 …

依赖不对应导致java文件不能正常显示

项目中若出现非正常显示的java文件&#xff0c;检查下是否依赖版本不对应。&#xff08;前提必须是maven项目&#xff09;

基于单片机的太阳能热水器控制系统的研究-设计说明书

设计摘要&#xff1a; 本研究旨在设计和实现基于单片机的太阳能热水器控制系统。太阳能热水器是一种有效利用太阳能来加热水的设备&#xff0c;在节能和环保方面具有显著的优势。本研究通过使用单片机技术&#xff0c;将传统的太阳能热水器与智能控制相结合&#xff0c;提高了…