使用子產品: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