我想獲得服務內的服務名稱。粗略的想法是獲取進程ID並將進程ID與WMI,ServiceCotroller或EnumServicesStatusEx()API枚舉的服務進行比較。獲得服務內的服務名稱
問題是服務在域帳戶下運行(它不是本地管理員)。當我想枚舉正在運行的服務中的服務時,正在運行的服務本身從枚舉中缺失!
如果我將服務帳戶移到本地管理員,則找到正在運行的服務。所以這不是代碼問題。 (如果代碼問題,行爲應該是相同的:服務未找到。)
如果我將邏輯提取到控制檯應用程序(或通過powershell)並在服務帳戶下運行應用程序或PowerShell,也會找到該服務。所以這不是許可問題。 (如果權限問題,行爲應該是相同的:未找到服務。)
當服務帳戶不是管理員和INSIDE服務時,無法枚舉該服務。這是非常有線的問題。
我從MSDN檢查EnumServicesStatusEx的文檔,發現本地管理員有比本地認證用戶更多的SC_MANAGER_LOCK。這是原因嗎?但是我不能將鎖與服務枚舉鏈接起來。
或者有人請指出一種方法來查詢服務中的服務名稱。
謝謝。
順便說一下,它在Windows 2008 R2上。
我發現相關的問題:How to get name of windows service from inside the service itself。 1st answer不適合我。我想提供一個通用的庫,並且無法控制安裝程序。 2nd answer和我一樣。我想這應該與我的結果相同。
感謝您的回覆。我得到服務PID並嘗試運行tasklist,如:tasklist/FI「PID eq {PID}」/ SVC/NH。它返回的服務名稱是* N/A *。順便說一句,如果我使用服務帳戶在powershell中運行tasklist,它可以返回正確的服務名稱。所以你的解決方案失敗了。太。 – DeepNight
您確定要正確調用它嗎?你能給出你使用的確切語法嗎? – JPBlanc
'tasklist/FI「PID eq 2524」/ SVC'在控制檯返回「sqlservr.exe 2524 MSSQLSERVER」返回服務調試輸出中的「sqlservr.exe 2524 N/A」有線。 – DeepNight