2011-10-25 4 views
1

타사 소프트웨어에서 호출 할 수있는 exe를 통해 서비스를 종료 할 수 있어야하므로 C#을 사용하여 빠른 해결책을 찾을 수 있습니다.권한 상승없이 C# 서비스 중지

서비스를 중지하기 위해 온라인에서 찾은 다음 코드를 사용하려고하지만 관리자 권한으로 exe를 실행하지 않으면 작동하지 않을 것입니다. (이상적으로는이 작업을 매끄러운)

public static void StopService(string serviceName, int timeoutMilliseconds) 
    { 
     ServiceController service = new ServiceController(serviceName); 
     service.MachineName = "."; 
     try 
     { 
      TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); 

      service.Stop(); 
      service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); 
     } 
     catch 
     { 
      // ... 
     } 
    } 

고도를 필요로하는 방법이 있습니까?

+1

서비스가 동일한 계정으로 실행되고 있지 않으면 Windows 서비스를 중지 할 수 있다고 생각하지 않습니다. –

+3

그 트릭이 특권과 액세스 권한의 목적을 무력화하지는 않습니까? 어떤 바이러스가이 트릭을 사용하지 않을까요? –

+0

시스템을 해킹하거나 일부 버그를 이용하는 것 외에는 방법이 없습니다 ... => NO! – Yahia

답변

2

이런 식으로 생각하십시오. 주위에 방법이 있다면 전체 보안 문제는 무엇이겠습니까?

아니요. 서비스가 동일한 계정으로 실행되지 않는 한 서비스를 중지 할 수 없습니다.

제가 바이러스 인 경우 가장 먼저 할 일은 무엇입니까? "고도를 필요로하는 방법"을 사용하여 바이러스 검색 서비스를 중지하십시오.

1

전용 .exe 파일 또는 해당 서비스와 통신하는 방법을 알고있는 모든 응용 프로그램 (예 : 명명 된 파이프를 통해)과 통신하는 자신의 'Stopper-Service'를 설치할 수 있습니다.

모든 app/.exe가 특정 서비스를 중지/다시 시작해야한다는 등의 이유로이 서비스에 신호를 보내고 있습니다.

자신의 서비스 만 중지하려는 경우 해당 메시징 기능을 통합하는 것을 고려할 수 있으므로 관리자 권한없이 제어 할 수 있습니다.

물론 승인 된 앱만 제어 할 수 있도록 적절한 보안 메커니즘을 구현해야합니다.

희망이 도움이됩니다.

4

개별 서비스에 대한 액세스 제어 목록이 있습니다. 특정 서비스를 종료/중지 할 수 있도록 특정 사용자 또는 그룹에 권한을 부여 할 수 있습니다. cmd 줄 도구 "subinacl"을 사용하여 Microsoft에서 acl을 설정할 수 있습니다. http://www.microsoft.com/download/en/details.aspx?id=23510 서비스 구성을 쿼리 할 수있는 권한을 부여하지 않고 서비스를 종료 할 권한을 부여 할 수 있습니다.