sc qc를 사용하지 않고 Windows 서비스 실행 파일의 경로를 얻으려면 어떻게해야합니까?


15

명령 프롬프트를 통해 실행 파일의 경로에 대한 Windows 서비스를 쿼리해야합니다. 나는 길을 생각하는 것이다 이렇게는 다음과 같습니다 sc qc myServiceName,하지만 난 그렇게 할 때, 나는 다음과 같은 오류가 발생합니다 :

[SC] QueryServiceConfig 실패 122 :

시스템 호출로 전달 된 데이터 영역이 너무 작습니다.

[SC] GetServiceConfig는 1094 바이트가 필요합니다

sc 명령이 반환 해야하는 데이터에 비해 너무 작은 다른 라이브러리로 데이터 구조를 보내는 중이라고 생각합니다. SC가 더 큰 데이터 구조 (1094 바이트)로 멋지게 다시 시도하는 대신 폭탄이 터져 나쁘게 오류 메시지가 표시됩니다. 감사합니다 Micro $ oft.

이 오류를 해결하는 방법이 있습니까? 실행 파일 경로가 필요하지만 필요한 경우 다른 텍스트에서 파싱합니다.

답변:


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불행히도 모든 서비스를 나열하지만 경로는 없습니다.
Shayan

13

실행 가능한 솔루션을 찾았습니다.

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

물론 이것은 약간의 구문 분석이 필요하지만 services.msc 대화 상자가 제공하는 전체 경로를 제공합니다.


10

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


불행히도 XP에는 기본적으로 Powershell이 ​​없으므로 powershell에 의존 할 수 없습니다. 추가 소프트웨어를 설치하지 않고 XP, server 2008 및 7을 모두 지원해야합니다.
Jared

@Jared 너무 나쁘다. 여러 대의 원격 컴퓨터에 대해 단일 컴퓨터에서 이것을 실행할 수 없습니까?
MDMarra

실제로 이것은 응용 프로그램의 제거 프로그램에 들어가는 약간의 스크립트입니다. 나는 작동하는 솔루션을 찾아서 그것에 대한 답변을 추가했습니다.
Jared

4

wmic명령 행 유틸리티를 사용하여 시도하십시오 . 다음은 내 컴퓨터의 서비스 예입니다 CrashPlanService.

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

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

기본적으로 wmic service <<YourService>> get PathName.


1
제대로 작동하지 않습니다. 그러나 다른 한편으로는 다음과 같이 작동합니다. "wmic service | find"<servicename> "
djangofan

@ djangofan 어떤 결과를 얻습니까? 어떤 서비스를 사용합니까? 다른 버전의 wmicWindows 7 SP1을 사용하고 있습니까?
벤 필 브로우

@ Ben Pilbrow 그것은 나에게도 효과가 없었다. wmic는 경로 이름을 얻지 못합니다 (다음 줄에 아무것도없는 "PathName"만 반환). 경로에 포함 된 매개 변수가 너무 많아서 길이가 너무 길기 때문에 이것이 확실하지 않습니다.
Jared

나를 위해 일하지만 난 약간의 결과를 처리했다 : ((WMIC 서비스 SQLBrowser GET를 PathName) -match "을 "")[0].replace("" "," ")
katbyte

wmic service잘 작동합니다. 경로와 함께 모든 서비스를 나열합니다.
Shayan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.