2012-07-26 2 views
0

NetworkService로 실행되는 Windows 서비스 MyService (C#으로 구현 됨)가 있습니다. MyService는 NetworkService로 실행되는 다른 써드 파티 서비스 인 TheirService를 시작해야합니다. 이 코드를 사용하여이면 MyService에서 시도 할 때 TheirService가 액세스 거부 오류와 함께 실패 시작하려고 :다른 서비스에서 NetworkService 서비스를 다시 시작하십시오.

public static bool StartService(string serviceName, TimeSpan timeout) 
    { 
     bool started = false; 
     try 
     { 
      using (ServiceController sc = new ServiceController(serviceName)) 
      { 
       if (sc != null) 
       { 
        sc.Refresh(); 
        if (sc.Status == ServiceControllerStatus.Running) 
        { 
         // Stop service 
         Trace.TraceInformation("Util.StartService Stopping service '{0}'...", serviceName); 
         sc.Stop(); 
        } 

        sc.WaitForStatus(ServiceControllerStatus.Stopped, timeout); 
        sc.Refresh(); 

        // Start service 
        Trace.TraceInformation("Util.StartService Starting service '{0}'...", serviceName); 
        sc.Start(); 

        sc.WaitForStatus(ServiceControllerStatus.Running, timeout); 
        sc.Refresh(); 

        started = (sc.Status == ServiceControllerStatus.Running); 
       } 
      } 

     } 
     catch (Exception e) 
     { 
      Trace.TraceError("Util.StartService Exception occurred while starting service '{0}'.\n{1}\n{2}", serviceName, e.Message, e.StackTrace); 
     } 

     Trace.TraceInformation("Util.StartService Service '{0}' restarted? {1}", serviceName, started); 
     return started; 
    } 

TheirService의 SID 정보 :

C:\>sc showsid TheirService 
NAME: TheirService 
SERVICE SID: S-1-5-80-3034156332-2544749427-1608259134-1317875859-4063208518 

C 번호에서 프로그램이면 MyService에서 TheirService을 시작하는 방법이 있나요?

편집 : 목표 - MyService 설치의 일부로 TheirService를 다시 시작하려고 할 수 있습니다.

+0

TheirService를 수정할 수 있습니까? 그렇다면, 당신이 원하는 것을 얻을 수 있습니다. – Learner

+0

@Cristi 불행히도. TheirService는 타사 서비스입니다. – amo

답변

1

서비스가 실행되도록 설정된 것은 중요하지 않습니다. Windows 서비스를 시작/중지하려면 관리자에게 권한을 부여해야합니다.

또는 컨트롤러를 제어하려면 grant NetworkService permission 수 있지만 서비스를 설치하는 경우 관리자가 이러한 부여를해야합니다. 또한 타사 서비스의 보안을 약화시킵니다. NetworkService로 실행하는 모든 사용자가이를 다시 시작할 수 있기 때문입니다. NetworkService 계정의 최소 권한 목적을 상실합니다.

+0

NetworkService 권한을 제어하여 기존의 TheirService 서비스의 보안을 손상 시키려하지 않습니다. LocalSystem을 가장하거나 MyService의 관리자에게 올라가서 TheirService를 다시 시작하는 방법이 있습니까? – amo

+0

@bflat 알고 있지 않습니다. 침묵하는 표고가 보안 문제 일 것입니다. 서비스 계정으로 서비스를 실행 한 다음 서비스 계정 액세스 권한을 부여하여 "TheirService"를 다시 시작합니다. – vcsjones

1

이 서비스에 대한 높은 권한이 필요합니다. 해킹은 원하는 것을 수행하고 네트워크 서비스로부터 명령을받는 중개자 '로컬 시스템'서비스를 갖는 것입니다.

는 편집 : 'TheirService'이 수정 될 수있는 경우는 , 당신은 당신의 서비스에서 그 차례에에 명령을 보낼 수 있습니다, 그것은 this answer에 따라 자체를 다시 시작합니다.

관련 문제