Windows
如何在不使用 sc qc 的情況下獲取 Windows 服務執行檔的路徑?
我需要通過命令提示符查詢 Windows 服務的執行檔路徑。我認為我這樣做的方式是:
sc qc myServiceName
,但是當我這樣做時,我收到以下錯誤:$$ SC $$查詢服務配置失敗 122: 傳遞給系統呼叫的數據區域太小。
$$ SC $$GetServiceConfig 需要 1094 字節
我認為這意味著 sc 命令正在向某個其他庫發送一個資料結構,該資料結構對於需要返回的數據來說太小了。SC 沒有很好地使用更大的資料結構(1094 字節)重試,而是轟炸並給了我這個醜陋的錯誤消息。感謝 Micro$oft。
那麼有沒有辦法解決這個錯誤?我只需要執行檔的路徑,但如果需要,會從其他文本中解析出來。
我找到了一個可行的解決方案:
reg query "HKLM\System\CurrentControlSet\Services\<serviceName>" /v "ImagePath"
當然,這需要一些解析,但它為我提供了 services.msc 對話框提供的完整路徑。
在嘗試獲取執行檔路徑很長的服務的詳細資訊時,我也遇到了這個問題。此討論包含一種解決方法;您可以將緩衝區大小作為參數傳遞給
sc qc
. 也就是說,如果你這樣做:sc qc <service name> 5000
“傳遞給系統呼叫的數據區域太小”錯誤消失了。
另請參閱SC QC MSDN 頁面:
sc [<ServerName>] qc [<ServiceName>] [<BufferSize>]
在哪裡:
<BufferSize> 指定緩衝區的大小(以字節為單位)。預設緩衝區大小為 1,024 字節。