我需要通过命令提示符查询 Windows 服务以获取其可执行文件的路径。我认为我会这样做是:sc qc myServiceName
,但是当我这样做时,出现以下错误:
[SC] QueryServiceConfig 失败 122:
传递给系统调用的数据区域太小。
[SC] GetServiceConfig 需要 1094 个字节
我认为这意味着 sc 命令正在向其他库发送一个数据结构,而这个数据结构对于需要返回的数据来说太小了。SC 并没有使用更大的数据结构(1094 字节)进行重试,而是失败了,并向我发送了这条丑陋的错误消息。感谢 Micro$oft。
那么有没有办法解决这个错误?我只需要可执行文件的路径,但如果需要的话,我会从其他文本中解析它。
答案1
答案2
我找到了一个可行的解决方案:
reg query "HKLM\System\CurrentControlSet\Services\<serviceName>" /v "ImagePath"
当然这需要一些解析,但它给了我 services.msc 对话框提供的完整路径。
答案3
您可以在 PowerShell 中使用 WMI 查询执行此操作,如下所示:
$service = get-wmiobject -query 'select * from win32_service where name="winrm"'; echo $service.pathname
这将为您提供完整路径,包括 services.msc 中显示的选项。只需将winrm
我的示例中的 替换为您想要搜索的任何服务即可。
上述查询winrm
应该输出C:\Windows\System32\svchost.exe -k NetworkService
答案4
从 PowerShell 7 开始:
(Get-Service theServiceName).BinaryPathName