python實現windows Service服務程式

來源:互聯網
上載者:User

標籤:自動啟動   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服務程式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.