sc qc를 사용하지 않고 Windows 서비스 실행 파일의 경로를 얻으려면 어떻게해야합니까? 호출로 전달 된 데이터 영역이 너무 작습니다.

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

[SC] QueryServiceConfig 실패 122 :

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

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

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

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



답변

실행 파일 경로가 매우 긴 서비스의 세부 정보를 얻으려고 할 때도이 문제가 발생했습니다. 이 토론 에는 해결 방법 포함되어 있습니다. 에 버퍼 크기를 인수로 전달할 수 있습니다 sc qc. 즉, 당신이 할 경우 :

sc qc <service name> 5000

“시스템 호출에 전달 된 데이터 영역이 너무 작습니다”오류가 사라집니다.


SC QC MSDN 페이지 도 참조 하십시오.

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

어디:

<BufferSize> 버퍼의 크기 (바이트)를 지정합니다. 기본 버퍼 크기는 1,024 바이트입니다.


답변

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

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

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


답변

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


답변

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

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

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

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