標籤:自動啟動 windows tor handle display exce 服務 檔案 通過
python實現windows Service服務程式
win32serviceutil.ServiceFramework是封裝得很好的Windows服務架構,本文通過繼承它來實現。
- 通過SvcDoRun方法,實現服務啟動,運行服務內的業務代碼。
- 通過SvcStop方法,停止服務。
WinPollManager.py代碼如下:
import win32serviceutilimport win32serviceimport win32eventimport winerrorimport servicemanagerimport timeimport sysimport osclass WinPollManager(win32serviceutil.ServiceFramework): """ #1.安裝服務 python WinPollManager.py install #2.讓服務自動啟動 python WinPollManager.py --startup auto install #3.啟動服務 python WinPollManager.py start #4.重啟服務 python WinPollManager.py restart #5.停止服務 python WinPollManager.py stop #6.刪除/卸載服務 python WinPollManager.py remove """ _svc_name_ = "py_agent_poll_manager" # 服務名 _svc_display_name_ = "py_agent_poll_manager" # 服務在windows系統中顯示的名稱 _svc_description_ = "python windows monitor agent" # 服務的描述 def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) self.isAlive = True self._poll_intvl = 30 def SvcDoRun(self): while self.isAlive: print ‘monitor testing‘ time.sleep(self._poll_intvl) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) self.isAlive = Falseif __name__ == ‘__main__‘: if len(sys.argv) == 1: try: evtsrc_dll = os.path.abspath(servicemanager.__file__) servicemanager.PrepareToHostSingle(WinPollManager) servicemanager.Initialize(‘WinPollManager‘, evtsrc_dll) servicemanager.StartServiceCtrlDispatcher() except win32service.error, details: if details[0] == winerror.ERROR_FAILED_SERVICE_CONTROLLER_CONNECT: win32serviceutil.usage() else: win32serviceutil.HandleCommandLine(WinPollManager) # 括弧裡參數可以改成其他名字,但是必須與class類名一致;
打包exe檔案
# -*- coding: utf-8 -*-"""pip install pyinstallerpyinstaller -F -w WinPollManager.py"""from PyInstaller.__main__ import runif __name__ == ‘__main__‘: params = [‘WinPollManager.py‘, ‘-F‘, ‘-c‘, ‘--icon=favicon.ico‘] run(params)
打包成功後在dist目錄下產生exe檔案
執行方式
- 安裝服務 WinPollManager.exe install
- 服務自動啟動 WinPollManager.exe --startup auto install
- 啟動服務 WinPollManager.exe start
- 重啟服務 WinPollManager.exe restart
- 停止服務 WinPollManager.exe stop
- 刪除/卸載服務 WinPollManager.exe remove
參考文章:
http://zhangweide.cn/archive/2013/windows-service-example-using-pyinstaller.html
http://www.cnblogs.com/dcb3688/p/4496934.html
http://blog.csdn.net/dysj4099/article/details/21896085
python實現windows Service服務程式