天天看點

用py2exe安裝python windows服務

使用子產品:pywin32,py2exe

#運作安裝程式的bat

ProductCollectWin32ServiceSetup.bat

内容:

cd "E:\python\pydev\src\"

e:

python ProductCollectWin32ServiceSetup.py py2exe

pause

#安裝成windows服務的python腳本

ProductCollectWin32ServiceSetup.py

内容:

#! /usr/bin/env python

# -*- coding: utf-8 -*-

#@author [email protected]

#@version 2010-09-17 14:55

# mysetup.py

from distutils.core import setup

import py2exe

setup(service=["ProductCollectWin32Service"])

#python windows服務程式

ProductCollectWin32Service.py

内容:

#! /usr/bin/env python

# -*- coding: utf-8 -*-

#@author [email protected]

#@version 2010-09-17 14:55

import win32event

import win32service

import win32serviceutil

class ProductCollectWin32Service (win32serviceutil.ServiceFramework):

    _svc_name_ = "pythonService"

    _svc_display_name_ = "pythonService"

    def __init__(self, args):

        win32serviceutil.ServiceFramework.__init__(self, args)

        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)

    def SvcStop(self):

        # 先告訴SCM停止這個過程

        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)

        # 設定事件

        win32event.SetEvent(self.hWaitStop)

    def SvcDoRun(self):

        # 等待服務被停止

        win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)

if __name__=='__main__':

    win32serviceutil.HandleCommandLine(ProductCollectWin32Service )

ProductCollectWin32Service這個子產品的檔案名要和子產品名保持一緻

運作bat檔案後可以在dist得到ProductCollectWin32ServiceSetup.exe

然後用windows的sc指令安裝 删除 更新服務

安裝指令:

sc create pythons binPath= E:\python\pydev\src\dist\ProductCollectWin32ServiceSetup.exe

參考下面的位址:“=”後面是必須空一格的,否則會出現錯誤。

http://daohao123.iteye.com/blog/568507

sc指令詳解:

sc delete [servicename]

使用這個指令即可删除一個windows服務

描述:

         SC 是用于與服務控制管理器通信的指令行程式。

用法:

         sc <server> [command] [service name] <option1> <option2>...

         選項 <server> 的格式為 "\\ServerName "

         可以鍵入 "sc [command]"以獲得指令的進一步幫助

         指令:

           query-----------查詢服務的狀态,

                           或枚舉服務類型的狀态。

           queryex---------查詢服務的擴充狀态,

                           或枚舉服務類型的狀态。

           start-----------啟動服務。

           pause-----------發送 PAUSE 控制請求到服務。

           interrogate-----發送 INTERROGATE 控制請求到服務。

           continue--------發送 CONTINUE 控制請求到服務。

           stop------------發送 STOP 請求到服務。

           config----------(永久地)更改服務的配置。

           description-----更改服務的描述。

           failure---------更改服務失敗時所進行的操作。

           qc--------------查詢服務的配置資訊。

           qdescription----查詢服務的描述。

           qfailure--------查詢失敗服務所進行的操作。

           delete----------(從系統資料庫)删除服務。

           create----------建立服務(将其添加到系統資料庫)。

           control---------發送控制到服務。

           sdshow----------顯示服務的安全描述符。

           sdset-----------設定服務的安全描述符。

           GetDisplayName--擷取服務的 DisplayName。

           GetKeyName------擷取服務的 ServiceKeyName。

           EnumDepend------枚舉服務的依存關系。

         下列指令不查詢服務名稱:

         sc <server> <command> <option>

           boot------------(ok | bad) 表明是否将上一次啟動儲存為

                           最後所知的好的啟動配置

           Lock------------鎖定服務資料庫

           QueryLock-------查詢 SCManager 資料庫的 LockStatus

示例:

         sc start MyService