【Windows】開機自動執行(註冊服務)

搜尋"服務"並開啟後,會看到以下畫面







這邊要使用windows內建的sc指令(Service Control)來運行、管理服務
(或者也可以使用 Winsw 來進行控管)


首先要用管理員的身分開啟CMD



註冊服務

sc create MyService binPath="C:\...\MyService.exe"


啟動服務

sc start MyService 
等同於 使用介面點選啟動



查看服務

sc query MyService
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




或者出現 錯誤1053: 服務並未以適時的方式回應啟動或控制請求


代表檔案無法執行或者無法支援Windows Service

(不能把一般的.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



(以架設網站後端伺服器為例,通常需要增加Apache以及MySQL)

sc config MyService depend=Apache2.4/MySQL




(然而,當需要關閉Apache、mySQL時,無法直接關閉。須先把主體服務關閉以後才可以關閉這些底層服務)


查看日誌

搜尋 事件檢視器
點開  Windows記錄 > 應用程式






沒有留言:

張貼留言