Windows

如何在不使用 sc qc 的情況下獲取 Windows 服務執行檔的路徑?

  • March 10, 2020

我需要通過命令提示符查詢 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 字節。

引用自:https://serverfault.com/questions/333904