2010-07-09 5 views
0

ServiceController.GetServices() 메서드를 사용하여 모든 서비스 목록을 가져 오려고합니다. 콘솔 응용 프로그램에서는 정상적으로 작동하지만 Windows 서비스에서이 메서드를 호출하면 빈 목록이 나타납니다. 그것은 인증 문제로 보이지만 모든 계정 옵션 (로컬 시스템, 로컬 서비스, 네트워크 서비스, 사용자 [로컬 관리자])을 사용했지만 운이 없습니다.Windows 서비스의 ServiceController

의견이 있습니까?

감사합니다.

+0

목록이 비어 있는지 어떻게 확인합니까? – Andreas

+0

하나의 서비스 (다른 서비스 + 현재 서비스)를 얻으려면 먼저 서비스가 작동하는지 확인하십시오. 다른 서비스에 대한 정보를 얻지 못하는 경우 현재 서비스를받는 것이 좋습니다. P –

+0

@Andreas I socket을 사용하고 있습니다. 텔넷을 통해 명령을 보내고 있습니다. 명령이 "list"이면 모든 서비스의 이름을 반환합니다. 응용 프로그램을 콘솔 응용 프로그램으로 만들면 모든 것이 정상이지만 Windows 서비스 응용 프로그램이 비어있게됩니다. – Feyyaz

답변

1

동의합니다. 사용자 계정 권한 문제 여야합니다. 열거는 원시 OpenSCManager() API 함수를 호출하여 시작해야합니다. 이것은 매우 권한이있는 함수입니다. SDK 문서는 관리자 액세스가 필요하다는 것을 알려줍니다. 서비스를 구성하고 관리자 로그인을해야합니다. 네가 이미 이걸 시도한 것처럼 들리는데. UAC에 대해 조금 걱정하면 보안 전문가의 가정 인 serverfault.com에서 더 많은 질문을하십시오.

+0

Artiom의 제안을 시도해 보았습니다. 서비스 이름으로 두 개의 ServiceController 객체를 만들었고 오류가 발생하지 않았습니다. 따라서 문제는 Windows 서비스에서 모든 서비스를 가져 오는 것입니다. BTW, 사용자는 이미 관리자입니다. 감사합니다 – Feyyaz

+0

원격 컴퓨터에서이 서비스가 실행 중입니까? –

+0

아니요 로컬 서비스가 아닙니다. 간단하게 문제는 ServiceController.GetServices() 메서드가 빈 목록을 반환한다는 것입니다. 나는 아직도 문제를 이해하지 못한다 : /. – Feyyaz

관련 문제