Windows 10 封裝普通EXE爲系統服務

Windows 10 封裝普通EXE爲系統服務

Windows服務是指Windows操作系統中的一種運行在後臺的計算機程序。它在概念上類似於Unix/Linux守護進程,一個標準的Windows服務必須匹配服務控制管理器(SCM)(負責管理Windows服務的組件)的接口規則和協議,處理服務控制管理器(SCM)的啓動、停止和暫停消息。

SC

SC.exe 爲Windows系統自帶工具,可對Windows系統服務進行創建查詢啓動停止刪除等操作。
注意: sc.exe 只支持操作服務控制管理器(SCM)接口規範的系統服務. 一般的網絡服務進程如shadowsocks, nginx 等無法作爲服務直接啓動,需要用到接下來提到的服務封裝器.

SrvAny.exe

SrvAny.exeWindows Resource Kit中一個特殊組件。可以作爲服務封裝器來處理預期的服務接口(例如處理service_start,然後響應service_started或service_failed)並允許配置任何可執行文件或腳本作爲一個服務。

示例

這裏以shadowsocks爲示例:

Step 1

首先以SrvAny.exe作爲封裝器創建一個名爲”shadowsocks”系統服務框架, 服務暫時還無法使用, 具體的shadowsocks運行配置稍後通過註冊表詳細配置.

sc create "shadowsocks" binPath=C:\Go\bin\srvany.exe type= own start= auto DisplayName= "shadowsocks"

sc query 查詢服務狀態爲STOPPED.

sc query shadowsocks

SERVICE_NAME: ss_59488
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

Step 2

運行regedit, 定位到以下KEY:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\shadowsocks

右擊”shadowsocks”項, “新建”->”項”, 創建Parameters子項.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Services\Parameters

Step 3

Parameters子項下添加”shadowsocks”運行配置:

名稱 類型 描敘
AppDirectory REG_SZ 運行目錄
Application REG_SZ 運行exe路徑
AppParameters REG_SZ 運行exe參數

當服務控制管理器(SCM) 通知SrvAny.exe 封裝器啓動時, SrvAny.exe將查找註冊表以上配置,啓動指定Application .

Step 4

sc start shadowsocks
SERVICE_NAME: shadowsocks
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 2  START_PENDING
                                (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x7d0
        PID                : 31452
        FLAGS
sc query shadowsocks
SERVICE_NAME: shadowsocks
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

其他封裝器

SrvStart

https://github.com/rozanski/srvstart

winsw

https://github.com/kohsuke/winsw

NSSM

推薦使用, 只需運行命令即可通過圖形界面完成配置, 具體可訪問 the Non-Sucking Service Manager.

nssm install <servicename>

Windows Service Manager (SrvMan)

http://tools.sysprogs.org/srvman/

Resource

Windows Resource Kit

Resource_Kit Wiki

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章