서비스 내 서비스 이름을 가져오고 싶습니다. 대략적인 아이디어는 프로세스 ID를 얻고 프로세스 ID를 WMI, ServiceCotroller 또는 EnumServicesStatusEx() API에 의해 열거 된 서비스와 비교하는 것입니다.서비스 내 서비스 이름 받기
서비스가 도메인 계정 (로컬 관리자가 아님)에서 실행 중입니다. 실행중인 서비스 내부의 서비스를 열거하려면 실행중인 서비스 자체가 열거 형에서 누락되었습니다.
서비스 계정을 로컬 관리자로 이동하면 실행중인 서비스가 발견됩니다. 그래서 코드 문제가 아닙니다. (코드 문제가있는 경우 동작은 동일해야합니다 : 서비스를 찾을 수 없습니다.)
로직을 콘솔 응용 프로그램 (또는 powershell)으로 추출하고 서비스 계정에서 응용 프로그램 또는 powershell을 실행하면 해당 서비스도 검색됩니다. 따라서 허가 문제가 아닙니다. (사용 권한 문제가 있으면 동작이 동일해야합니다. 서비스를 찾을 수 없습니다.)
서비스 계정이 관리자가 아니고 서비스가 아닌 경우 서비스를 열거 할 수 없습니다. 그것은 매우 전선 문제입니다.
MSDN에서 EnumServicesStatusEx에 대한 설명서를 확인하고 로컬 관리자가 로컬 인증 된 사용자보다 추가 SC_MANAGER_LOCK을 찾았습니다. 이유인가? 하지만 서비스 열거와 잠금을 연결할 수는 없습니다.
또는 누군가가 서비스 내부에서 서비스 이름을 쿼리하는 방법을 지정하십시오.
감사합니다.
현재 Windows 2008 R2입니다.
관련 질문 : How to get name of windows service from inside the service itself이 발견되었습니다. 1st answer은 허용되지 않습니다. 공통 라이브러리를 제공하고 설치 프로그램을 제어 할 수 없습니다. 2nd answer은 나와 같은 생각입니다. 나는 그것이 나의 결과와 같아야한다고 생각한다.
답장을 보내 주셔서 감사합니다. 서비스 PID를 얻고 tasklist/FI "PID eq {PID}"/ SVC/NH와 같은 tasklist를 실행하려고합니다. 서비스 이름은 * N/A *입니다. BTW, 서비스 계정으로 powershell에서 tasklist를 실행하면 올바른 서비스 이름을 반환 할 수 있습니다. 그래서 당신의 솔루션은 실패합니다. 너무. – DeepNight
올바르게 부르시겠습니까? 당신이 사용하는 정확한 구문을 줄 수 있습니까? – JPBlanc
'tasklist/FI "PID eq 2524"/ SVC "콘솔에서"sqlservr.exe 2524 MSSQLSERVER "가"sqlservr.exe 2524 N/A "를 반환합니다. 서비스 디버그 출력에 있습니다. – DeepNight