搜尋"服務"並開啟後,會看到以下畫面
這邊要使用windows內建的sc指令(Service Control)來運行、管理服務
(或者也可以使用 Winsw 來進行控管)
首先要用管理員的身分開啟CMD
註冊服務
sc create MyService binPath="C:\...\MyService.exe"
啟動服務
sc start MyService
查看服務
查看服務 sc query MyService
詳細查看服務設定(query config) sc qc MyService
也可使用Powershell指令
Get-Service MyService
停止服務
sc stop MyService
刪除服務
sc delete MyService
要注意,刪除並不會停止正在運行的服務
暫停&繼續服務
sc pause MyService
要這個服務有支援"暫停、繼續"才能執行
否則會出現此行訊息
所要求的控制對於這個服務來說是不正確的
都做好之後,可將服務調整成自動啟動
設定config狀態的start為自動執行
sc config MyService start=auto
等同於開機執行(且使用者不用登入的情況下仍可執行)啟動順序比Startup(啟動時自動執行)還高
可能遇到的狀況
系統找不到指定的檔案
如果在執行服務時出現 錯誤2: 系統找不到指定的檔案
執行檔案不支援Windows Service
如果遇到錯誤 錯誤193
(不能把一般的.exe直接弄成服務,要遵守Windows Service的規則
要提供start stop status等運行方式,以及service相應的Config,才能註冊成為Windows服務
每種程式語言都會有套件可以著手這一塊)
路徑
註冊完服務後,服務的運行路徑預設在 C:\Windows\System32 底下
若用相對路徑產生的log檔案就會在這地方產生
如果程式有使用到設定檔,也要注意是相對位置還是絕對位置
否則讀不到設定檔案,執行出錯的話服務是run不起來的!
服務相依性
設置成Windows服務、讓他開機自動執行之後,實際上卻沒有自動啟動,還需要手動點選才會啟動,怎麼會這樣?
很有可能是服務啟動的順序(服務相依性)導致
依照服務的性質,如果該程式啟動需依賴其他服務啟動後才能啟動,則需要增加服務相依性
如果服務B用到必要服務A,可是B卻在電腦開啟時第一個被執行了,B怎麼可能啟動得起來呢
新增服務相依性,透過 depend 選項來指定相依服務
sc config MyService depend=Service1/Service2
如果有空白字元,就要用雙引號包住
sc config MyService depend=Service1/"Service 2"
(以架設網站後端伺服器為例,通常需要增加Apache以及MySQL)
sc config MyService depend=Apache2.4/MySQL
(然而,當需要關閉Apache、MySQL時,無法直接關閉。須先把主體服務關閉以後才可以關閉這些底層服務)
不過要注意,如果程式內還有SSL驗證之類的網路設定(ex: 需撥接網路)的話,是沒辦法在這個階段就讓程式跑起來的。就必須設定成自動(延遲啟動)
延遲啟動大概會在開機後2~3分鐘內執行完畢
另外註明:
輸入時需輸入服務名稱,而非"顯示名稱"
查看日誌
搜尋 事件檢視器
點開 Windows記錄 > 應用程式
內建帳戶
LocalSystem:權限最高,對本機擁有完整控制權
NetworkService:權限次等,擁有網路權限和基本操作權限
LocalService:權限最低,只有基本操作權限
還有自己的使用者帳戶
在登入這邊,可以選擇使用帳戶
預設(本機系統帳戶)是LocalSystem
沒有留言:
張貼留言