[Windows] 註冊Windows Service 服務 - m@rcus 學習筆記

文章推薦指數: 80 %
投票人數:10人

在cmd 中可以透過sc.exe 來建立windows service,sc 全名為service control,語法指令 ... 可以透過 start ServiceName 指令來啟動服務,要啟動時狀態 ... m@rcus學習筆記 只有累積,沒有奇蹟 Home ASP.NET ASP.NETApplication概述 ASP.NET網頁生命週期PageLife-Cycle ASP.NETStateManagement C# AnonymousType匿名型別 計算字串的長度方式 Array陣列中加入元素 刪除Array陣列中指定的元素 Office Http HTTPGET、POSTMethod SubChildCategory1 SubChildCategory3 Tool WebServiceStudio Other 微軟開發者大會HTML5搶先知 Home Business Internet Market Stock Downloads Dvd Games Software Office ParentCategory ChildCategory1 SubChildCategory1 SubChildCategory2 SubChildCategory3 ChildCategory2 ChildCategory3 ChildCategory4 Featured Health Childcare Doctors Uncategorized 2019年4月27日星期六 前言 最近專案有個需求要將排程透過WindowsService服務來執行,在WindowsOS要註冊Service可以用  cmd  與  powershell  兩種方式來建立以及刪除Service,兩種方式之前都有使用過但要再使用時都會上網查因此決定紀錄一下未來方便查詢,此篇就針對這兩種方式進行基本介紹與說明,若有問題歡迎提出一起討論或是給予指導。

使用命令提示字元cmd 在執行時請先注意開啟cmd需要使用Admin權限執行,否則會有執行異常或是告知沒權限的錯誤訊息,以下為開啟時應用程式時用administrator開啟的畫面,用管理者身分執行 cmd 註冊服務 在cmd中可以透過sc.exe來建立windowsservice,sc全名為servicecontrol,語法指令格式如下說明 描述: 在登錄和服務資料庫中建立服務項目。

使用方法: sccreate[servicename][binPath=]... 選項: 注意:選項名稱包括等號。

在等號和值之間必須空一格。

type= (預設值=own) start= (預設值=demand) error= (預設值=normal) binPath=<.exe> group= tag= depend= obj= (預設值=LocalSystem) DisplayName= password= 舉例來說,要註冊WindowsService名為TestService,其檔案位置在D:\Job\TestService\Test.Jobs.exe位置中,可以透過  createServiceName  指令建立 D:\>sccreateTestServicebinPath="D:\Job\TestService\Test.Jobs.exe" [SC]CreateService成功 建立成功可以看到新增TestService成功的訊息,接著我們使用   queryServiceName  查詢目前service狀態,剛建立好的service狀態會是STOPPED(1) D:\>scquerytestservice SERVICE_NAME:testservice TYPE:10WIN32_OWN_PROCESS STATE:1STOPPED WIN32_EXIT_CODE:1077(0x435) SERVICE_EXIT_CODE:0(0x0) CHECKPOINT:0x0 WAIT_HINT:0x0 啟動服務 可以透過  startServiceName  指令來啟動服務,要啟動時狀態為START_PENDING(2) D:\>scstarttestservice SERVICE_NAME:testservice TYPE:10WIN32_OWN_PROCESS STATE:2START_PENDING (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN) WIN32_EXIT_CODE:0(0x0) SERVICE_EXIT_CODE:0(0x0) CHECKPOINT:0x0 WAIT_HINT:0x7d0 PID:26300 FLAGS: 當正常執行,狀態就會更新為RUN(4)  SERVICE_NAME:testservice TYPE:10WIN32_OWN_PROCESS STATE:4RUNNING (STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN) WIN32_EXIT_CODE:0(0x0) SERVICE_EXIT_CODE:0(0x0) CHECKPOINT:0x0 WAIT_HINT:0x0 停止服務 要停止服務的可以透過  stopServiceName 指令,執行完指令會進行停止的動作,因此查看當下狀態會是STOP_PENDING,當停止後再次查詢可以看到狀態改為STOPPED(1) D:\>scstoptestservice SERVICE_NAME:testservice TYPE:10WIN32_OWN_PROCESS STATE:3STOP_PENDING (STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN) WIN32_EXIT_CODE:0(0x0) SERVICE_EXIT_CODE:0(0x0) CHECKPOINT:0x0 WAIT_HINT:0x0 D:\>scquerytestservice SERVICE_NAME:testservice TYPE:10WIN32_OWN_PROCESS STATE:1STOPPED WIN32_EXIT_CODE:0(0x0) SERVICE_EXIT_CODE:0(0x0) CHECKPOINT:0x0 WAIT_HINT:0x0 刪除服務 當要刪除服務的話執行  deleteServiceName  指令,其回傳訊息與create類似直接回傳刪除服務成功 D:\>scdeletetestservice [SC]DeleteService成功 使用Powershell  同樣的在執行前需要使用管理者身分執行powershell,否則會有執行異常或是告知沒權限的錯誤訊息, 以下為開啟時應用程式時用administrator開啟的畫面 註冊服務 在cmd中可以透過sc.exe來建立windowsservice,sc全名為servicecontrol,語法指令格式如下說明 PSC:\>New-Service-Name"TestService"-BinaryPathName"D:\Jobs\TestService\Jobs.exe"-DisplayName"TestService"-StartupTypeManual-Description"Thisisatestservice." StatusNameDisplayName --------------------- StoppedTestServiceTestService 參數介紹 Name:指定服務的名稱(唯一) BinaryPathName:服務的執行檔案路徑位置 DisplayName:顯示的名稱 StartupType:啟動類型 Description :描述 建立成功之後,在GUI呈現畫面如下 要註冊WindowsService名為TestService,其檔案位置在D:\Job\TestService\Test.Jobs.exe位置中,可以透過  createServiceName  指令建立 D:\>sccreateTestServicebinPath="D:\Job\TestService\Test.Jobs.exe" [SC]CreateService成功 建立成功,接著我們查詢目前service狀態,在powershell指令比cmd稍微多一滴滴要使用win32service在透過filter來查詢剛建立好的testservice,與cmd建立的相同剛建好的狀態都是Stopped  PSC:\>Get-WmiObjectwin32_service-Filter"name='testservice'" ExitCode:1077 Name:TestService ProcessId:0 StartMode:Manual State:Stopped Status:OK 啟動服務 可以透過  startServiceName-Name  指令來啟動服務,與cmd不同的是會等到running在顯示目前狀態 PSC:\>Start-Service-Name"testservice" PSC:\>Get-WmiObjectwin32_service-Filter"name='testservice'" ExitCode:0 Name:TestService ProcessId:18188 StartMode:Manual State:Running Status:OK: 停止服務 使用  stopServiceName  指令停止當下windowsservice,執行完指令會進行停止的動作,再次查詢服務狀態就會是已停止STOPPED PSC:\>Stop-Service-Name"testservice" PSC:\>Get-WmiObjectwin32_service-Filter"name='testservice'" ExitCode:0 Name:TestService ProcessId:0 StartMode:Manual State:Stopped Status:OK 刪除服務 在powersehll中刪除時要特別注意,官方MSDN中提供的Removeservice是powershell6才提供的新功能,如果您的powershell版本低於6時候執行removeserv則會跳出錯誤訊息:無法辨識'Remove-Service'詞彙是否為Cmdlet、函數,如果不確定電腦中使用的powershell版本為何,可以輸入以下指令, PSC:\>$PSVersionTable.PSVersion MajorMinorBuildRevision ----------------------- 5117763316 因此,Removeservice會根據版本不同執行不同的指令,如果powershell是6.0或以上請輸入指令 Remove-Servicesomeservice  powershell是6.0以下 Stop-Service'testservice';Get-CimInstance-ClassNameWin32_Service-Filter"Name='testservice'"|Remove-CimInstance 後記 透過以上簡單的介紹說明了在cmd與powershell中如何新增、刪除、查詢及修改windowsservice的各種方式與指令,如果有需要更細節的內容說是說明,可以透過MSDN官方網站查詢相關指令與更多的應用細節,這裡就針對簡單操作做說明不在琢磨,希望自己的金魚腦寫完這篇之後可以記錄得更清楚些!  參考 powershellcreatewindowsservice ShareThis:    Facebook Twitter Google+ Stumble Digg 以電子郵件傳送這篇文章BlogThis!分享至Twitter分享至Facebook 較新的文章 較舊的文章 首頁 0 意見: 張貼留言 訂閱: 張貼留言(Atom) 給作者拍拍手鼓勵 facebook粉絲頁 BlogArchive ►  2022 (7) ►  三月 (2) ►  二月 (2) ►  一月 (3) ►  2021 (18) ►  十二月 (2) ►  十一月 (2) ►  十月 (1) ►  九月 (3) ►  八月 (1) ►  七月 (1) ►  六月 (2) ►  五月 (2) ►  四月 (2) ►  三月 (1) ►  二月 (1) ►  2020 (12) ►  十月 (1) ►  九月 (1) ►  八月 (1) ►  七月 (2) ►  六月 (1) ►  五月 (1) ►  四月 (2) ►  三月 (1) ►  二月 (1) ►  一月 (1) ▼  2019 (156) ►  十二月 (1) ►  十一月 (1) ►  十月 (2) ►  九月 (9) ►  八月 (8) ►  七月 (11) ►  六月 (16) ►  五月 (20) ▼  四月 (22) [.NETCore]WindowsService-服務並未以適時的方式回應啟動或控制請求。

[Windows]註冊WindowsService服務 [.NET]當Dapper遇到SQLuniqueidentifierType [.NET]Quartz.NET排程執行異常-AlltriggersofJobcla... [.NETCore]Quartz.NET初體驗 [.NETCore]動態String字串相加效能比較 [.NETCore]String字串相加效能比較 [UnitTest]使用FluentAssertions增加單元測試碼可讀性 [.NETCore]ASP.NETCore環境佈署設定appsettings.json [.NETCore]Windows如何更新環境變數EnvironmentVariable [VisualStudio]使用SwitchCodeSnippet+Enum快速建立代碼 [UnitTest]Refactoring好幫手-Refactoring.Guru [VisualStudio]VSCode-Failedtocreatefilehand... [Git]如何更新GitHubFork的repository [VisualStudio]安裝VisualStudio新版後Resharper選單無故... [.NETCore]ASP.NETCore-ENVIRONMENT使用環境變數 [.NETCore]ASP.NETCoreDI生命週期LifeTime [VisualStudio]VisualStudio2019-無法安裝套件Microso... [CheatSheets]Gitcommands [.NETCore]EntityFrameworkCore初體驗 [.NETCore]安裝EntityFrameworkCore-使用EFCoreP... [.NETCore]安裝EntityFrameworkCore ►  三月 (23) ►  二月 (20) ►  一月 (23) ►  2018 (45) ►  十二月 (10) ►  十一月 (11) ►  十月 (11) ►  九月 (8) ►  八月 (5) ►  2012 (1) ►  十二月 (1) 關於我自己 Marcus 打雜小弟 檢視我的完整簡介 Categories .NET (170) .NETConf (1) .NETCore (64) .NETStandard (1) 上課心得 (3) 技術管理 (2) 商業思維 (3) 商業思維學院 (2) 職涯成長 (3) 讀書心得 (3) Architecture (6) Array (3) ASP.NET (39) ASP.NETApplication (2) ASP.NETCore (1) ASP.NETCore3.0 (1) ASP.NETPageLifeCycle (1) ASP.NETStateManagement (4) Authentication (1) AWS (1) Azure (8) Benchmark (4) blogger (1) C# (25) Casbin (1) CheatSheet (12) Chocolatey (3) Conference (3) COSCUP (1) DependencyInjection (1) Devops (6) Diagnostics (1) DistributedTracing (3) Docker (13) eBook (2) EndtoEnd (1) EntityFrameworkCore (3) Enum (1) ExceptionHandler (1) ExtensionMethod (1) FrontEnd (1) Fuslogvw (2) GenericHost (4) Git (6) GitHub (1) google (2) HTTP (4) HttpClient (1) IIS (16) JavaScript (1) jQuery (1) Json (4) Kestrel (3) LINQ (1) Linux (2) Logging (4) Microservices (1) Monitor (3) MOPCON (1) MSBuild (1) NLog (2) Nuget (5) Nunit (5) Observability (4) OpenSource (6) OpenTelemetry (5) Performance (8) Polly (3) PowerShell (3) Quartz.NET (5) Queue (1) Redis (10) Refactor (1) Reflection (1) Resharper (3) Roslyn (1) Serilog (5) SOAP (1) SQLServer (7) Swagger (4) TGONext (4) Tool (19) TPL (3) TypeScript (2) UML (1) UnitTest (13) Validate (1) VisualStudio (37) VisualStudioCode (3) WebAPI (7) WebAPIThrottle (2) WebForm (1) WebService (2) WindowAzure (1) windows (4) Windows10 (7) WindowsService (5) WindowsTerminal (2) WorkerService (1) XML (1) YAML (1) 推薦Blog TaswarBhatti Artech paulfun 雨夜朦胧 嘿嘿的学习日记 Yowko'sNotes CashWu 张子阳 FishLi Huan-Lin學習筆記 總網頁瀏覽量 Copyright© m@rcus學習筆記|PoweredbyBlogger DesignbyAndersNoren|BloggerThemebyNewBloggerThemes.com



請為這篇文章評分?