如何在不使用sc qc的情况下获取Windows服务可执行文件的路径?


15

我需要通过命令提示符在Windows服务中查询其可执行文件的路径。我想我的方式做到这一点是:sc qc myServiceName,但是当我这样做,我得到以下错误:

[SC] QueryServiceConfig失败122:

传递给系统调用的数据区域太小。

[SC] GetServiceConfig需要1094字节

我认为这意味着sc命令正在将数据结构发送到某个其他库,该库对于需要返回的数据而言太小了。SC并没有很好地重试使用更大的数据结构(1094字节),而是轰炸了一下,并给了我这个难看的错误消息。感谢Micro $ oft。

那么有没有办法解决此错误?我只需要可执行文件的路径,但是如果需要,它将从其他文本中解析出来。

Answers:


20

在尝试获取可执行文件的路径很长的服务的详细信息时,我也遇到了这个问题。本讨论包含一种解决方法。您可以将缓冲区大小作为参数传递给sc qc。也就是说,如果您这样做:

sc qc <service name> 5000

“传递给系统调用的数据区域太小”错误消失了。


另请参阅SC QC MSDN页面:

sc [<ServerName>] qc [<ServiceName>] [<BufferSize>]

哪里:

<BufferSize>指定缓冲区的大小(以字节为单位)。默认缓冲区大小为1,024字节。


2
FYI,2^13 = 8192是缓冲区大小的最大值。
nebffa

sc queryex type= service state= all | find /i "myServiceName列出所有服务,但不幸的是没有路径。
莎燕

13

我找到了可行的解决方案:

reg query "HKLM\System\CurrentControlSet\Services\<serviceName>" /v "ImagePath"

当然,这需要一些解析,但是它为我提供了services.msc对话框提供的完整路径。


10

您可以使用以下WMI查询在PowerShell中执行此操作:

$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


不幸的是,由于XP默认情况下没有Powershell,所以我不能依赖Powershell。我需要XP,Server 2008和7的支持,而无需安装任何其他软件。
杰瑞德(Jared)

@Jared太糟糕了。您无法在一台计算机上针对一堆远程计算机运行它?
MDMarra

不,这实际上是要在应用程序的卸载程序中使用的脚本。我想出了一个可行的解决方案,并为此添加了一个答案。
杰瑞德

4

使用wmic命令行实用程序尝试。这是我的机器上称为的服务示例CrashPlanService

C:\Users\Ben>wmic service CrashPlanService get PathName

PathName
"C:\Program Files\CrashPlan\CrashPlanService.exe"

基本上,wmic service <<YourService>> get PathName


1
不太有效。但是,另一方面,这是
可行的

@djangofan您会得到什么输出,以及使用哪种服务?也许您有其他版本的wmic(我在Windows 7 SP1上)?
本·皮尔布洛

@Ben Pilbrow这对我也不起作用。wmic没有获取路径名(仅在下一行返回“ PathName”,没有任何内容)。不知道这是否是因为该路径中嵌入了很多参数,导致它很长。
杰瑞德(Jared)

为我工作,但我不得不处理一下结果:((wmic service SQLBrowser get PathName)-match“ "")[0].replace("”“,”“)
katbyte 2012年

wmic service效果很好。列出所有服务及其路径。
莎彦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.