目录
1.使用pywin32创建 Windows 服务安装pywin32编写服务代码说明2. 将 Python 脚本打包为 exe3.安装服务4.启动服务5.停止和删除服务6. 调试服务7. 注意事项1.使用pywin32创建 Windows 服务
pywin32
是一个 Python 库,提供了与 Windows API 的接口,可以用来创建和管理 Windows 服务。
安装pywin32
pip install pywin32
编写服务代码
以下是一个简单的 Python 脚本示例,用于创建一个 Windows 服务:
import win32serviceutilimport win32serviceimport win32eventimport servicemanagerimport socketimport timeclass MyService(win32serviceutil.ServiceFramework): _svc_name_ = "MyPythonService" # 服务名称 _svc_display_name_ = "My Python Service" # 显示名称 _svc_description_ = "This is a Python-based Windows service." # 服务描述 def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) self.is_alive = True def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) self.is_alive = False def SvcDoRun(self): servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_, '')) self.main() def main(self): while self.is_alive: # 在这里编写你的服务逻辑 print("Service is running...") time.sleep(5)if __name__ == '__main__': win32serviceutil.HandleCommandLine(MyService)
说明
_svc_name_
:服务的内部名称。_svc_display_name_
:在 Windows 服务管理器中显示的名称。_svc_description_
:服务的描述信息。SvcDoRun
:服务启动时运行的逻辑。SvcStop
:服务停止时运行的逻辑。2. 将 Python 脚本打包为 exe
使用 PyInstaller 将上述脚本打包为 exe 文件:
pyinstaller --onefile your_service_script.py
生成的 exe 文件位于dist
目录中。
3.安装服务
使用sc
命令将 exe 文件安装为 Windows 服务:
sc create MyPythonService binPath= "C:\path\to\your_service_script.exe"
MyPythonService
:服务的名称。binPath
:exe 文件的完整路径。4.启动服务
使用以下命令启动服务:
sc start MyPythonService
5.停止和删除服务
停止服务:sc stop MyPythonService删除服务:
sc delete MyPythonService
6. 调试服务
如果服务无法启动,可以查看 Windows 事件日志(Event Viewer
)中的错误信息。也可以在服务代码中添加日志记录功能,以便调试。7. 注意事项
确保你的 exe 文件具有管理员权限。如果服务需要访问网络或其他系统资源,请确保配置了正确的权限。如果服务需要与用户交互,请使用win32service.SERVICE_INTERACTIVE_PROCESS
标志。通过