[server] 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
.