sc qc를 사용하지 않고 Windows 서비스 실행 파일의 경로를 어떻게 얻을 수 있습니까?

sc qc를 사용하지 않고 Windows 서비스 실행 파일의 경로를 어떻게 얻을 수 있습니까?

명령 프롬프트를 통해 Windows 서비스에 실행 파일 경로를 쿼리해야 합니다. 내 생각엔 내 방식대로~일 것이다, 하지만 그렇게 sc qc myServiceName하면 다음 오류가 발생합니다.

[SC] QueryServiceConfig 실패 122:

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

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

이것은 sc 명령이 반환해야 하는 데이터에 비해 너무 작은 데이터 구조를 다른 라이브러리로 보내는 것을 의미한다고 생각합니다. SC가 더 큰 데이터 구조(1094바이트)를 사용하여 훌륭하게 재시도하는 대신 갑자기 터져 나와 이런 추악한 오류 메시지를 표시합니다. Micro$oft님, 감사합니다.

그렇다면 이 오류를 해결할 수 있는 방법이 있습니까? 실행 파일의 경로만 필요하지만 필요한 경우 다른 텍스트에서 이를 구문 분석할 것입니다.

답변1

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

sc qc <service name> 5000

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


또한 참조하십시오SC QCMSDN 페이지:

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

어디:

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

답변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

관련 정보