如何檢查WIN32服務是否存在,如果有,請執行一些操作?如果服務存在條件
如果服務存在條件
回答
在我頭頂,可以使用「net」命令檢查是否正在運行特定的服務,如bmargulies所述,將結果輸入「find」。 像下面這樣的東西會檢查一個服務是否正在運行,如果是的話就停下來。然後,您可以啓動它,而不必擔心它是否已經運行或不:
net start | find "SomeService"
if ERRORLEVEL 1 net stop "SomeService"
net start "SomeService"
如果您使用FINDSTR做搜索,因爲一些其他的答案的建議,那麼你將檢查ERRORLEVEL等於爲0(零)......如果是,那麼你已經找到了字符串你正在尋找:
net start | findstr "SomeService"
if ERRORLEVEL 0 net stop "SomeService"
net start "SomeService"
最本質的DOS命令將設置ERRORLEVEL,讓您檢查是否像一個查找成功。
你不能在DOS下這樣做,因爲DOS不是Windows,甚至沒有「服務」的概念。
在Windows批處理文件可以使用sc
命令查找服務:
sc query | findstr SERVICE_NAME
這將枚舉所有服務,併產生各自的名稱。
您可以
sc query | findstr /C:"SERVICE_NAME: myservice"
特定服務搜索記住這個搜索是區分大小寫的。您可以將/I
開關添加到findstr
以避免這種情況。
如何使用WMIC
:
首先列出所有的進程,然後用grep的進程名。如果不存在,則不會打印結果。
wmic service |findstr "ProcessName"
例子:
C:\>wmic service |findstr "Search"
FALSE TRUE Windows Search
如何在if語句中工作? – Burt 2009-12-17 10:14:21
@Burt:如果語句用什麼語言?批處理,VBScript,C#甚至Perl?當然,如果你安裝wc(guu32中的coreutils的一部分),你會做c:> wmic service | findstr「Search」| wc -l,然後編寫一些代碼來獲取該數字以確定。 – 2009-12-17 17:21:42
只是一個增編接受的答案。如果您正在尋找除重新啓動服務之外的其他事情,並且正在查看是否安裝了該服務。
sc query state= all | findstr /C:"SERVICE_NAME: MyService"
if ERRORLEVEL 0 (**My Operation**)
在這種情況下,狀態=所有很重要,因爲如果服務沒有啓動,它會被解釋爲未安裝,這是兩回事。
如上所述,這應該是:'如果不是ERRORLEVEL 1(** My Operation **)' – bstoney 2016-02-23 03:32:24
不應成功測試:「if(not)errorlevel 1」??
在windows shell中「如果errorlevel#」意味着錯誤級別是#或更高,所以「如果錯誤級別0」一直是真的。
這是對「如何測試運行可執行文件是否有效」的答案,但它與查看服務無關已安裝或正在運行 – 2013-12-22 18:42:07
我知道了,但我目前無權發表評論。 – user2956477 2015-09-14 18:49:44
我使用下面的代碼:
SC QUERY | FIND "SERVICE_NAME: MyService"
IF %ERRORLEVEL% EQU 0 NET STOP MyService
如果爲MyService沒有找到,%ERRORLEVEL%會在1由FIND設置,否則它會停留在0。指令IF%ERRORLEVEL%EQU 0允許您測試最後一種情況並繼續對您的服務進行操作。
IF ERRORLEVEL 0 NET STOP MyService
將不起作用,因爲如果%ERRORLEVEL%大於或等於零,它將執行命令。
在Visual Studio後期生成事件,你必須把一個!
EXIT 0
末,因爲VS將會檢測到%ERRORLEVEL%= 0,它會認爲後生成事件已失敗。小心使用它,因爲這會隱藏命令序列中的所有錯誤。
有了這一招,你可以忽略錯誤並使用這個在你的後生成事件重新啓動服務:
NET STOP MyService
NET START MyService
EXIT 0
- 1. 服務器錯誤從其他條件如果條件
- 2. SQL:如果條件結果不存在?
- 3. SQL服務器加入結果條件
- 4. 綁定到服務,如果存在
- 5. 如果保存條件laravel
- 6. 如果條件在服務器中不起作用
- 7. 如果條件存在MySQL觸發器
- 8. 如果條件錯誤 - MS SQL服務器
- 9. 集合存在條件在WCF數據服務
- 10. 如果條件
- 11. 如果在特定日期存在任何事件的條件
- 12. 如果條件在mysql
- 13. 如果條件在webgrid
- 14. 如果條件在data.table
- 15. 如果條件在C#
- 16. 如果條件在modal.js
- 17. 如果條件在南極
- 18. 如果條件在PHP
- 19. 如果條件在Android
- 20. Linq多條款條件如果條件
- 21. Python服務文件緩存Apache競爭條件
- 22. Visual Studio安裝項目條件如果文件存在
- 23. mysql,在if條件中使用if條件的結果如果條件
- 24. 如何插入條件爲「如果不存在」的數據
- 25. 如何刪除表和約束條件(如果存在)?
- 26. 如果條件爲
- 27. jQuery如果條件?
- 28. PHP如果條件
- 29. Bash如果條件
- 30. php如果條件
什麼樣的服務是什麼系統?請提供更多的上下文。 – 2009-12-16 16:57:38
這將是一個本地服務,可以說名爲ABC。如果它作爲Visual Studio中的後期構建事件的一部分存在,我需要重新啓動該服務。 VS post生成事件基本上是批處理/ dos(??)命令。 – Burt 2009-12-16 16:59:23