2012-07-26 93 views
0

我有一個Windows服務MyService(以C#實現)作爲NetworkService運行。 MyService需要啓動另一個也作爲NetworkService運行的第三方服務ItsService。嘗試使用該代碼爲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 

有沒有從爲MyService從C#開始TheirService編程方式?

編輯:目標 - 作爲MyService安裝的一部分,我希望能夠重新啓動他們的服務。

+0

他們的服務可以修改嗎?如果是這樣,你可以實現你想要的 – Learner 2012-07-26 21:48:22

+0

@Cristi不幸的是不是。他們的服務是第三方服務。 – amo 2012-07-26 22:19:17

回答

1

無論服務設置爲運行什麼。您需要提升爲管理員來啓動/停止Windows服務。

或者,您可以grant NetworkService permission來控制它,但這些授權需要由管理員完成,可能是在安裝服務時。它還削弱了第三方服務的安全性,因爲任何以NetworkService身份運行的人都可以重新啓動它,這會破壞NetworkService帳戶的最小權限目的。

+0

我不想通過授予NetworkService權限來控制現有的他們的服務服務的安全性。有沒有辦法我可以模仿LocalSystem或簡單地從MyService升級到管理員來重新啓動他們的服務? – amo 2012-07-26 20:58:06

+0

@bflat不是我所知道的。像這樣的無聲提升將是一個安全問題。我會做的是將您的服務作爲服務帳戶運行,然後授予您的服務帳戶訪問權限以重新啓動「TheirService」。 – vcsjones 2012-07-27 01:52:14

1

您需要提升此服務的權限。黑客應該擁有一箇中間的「本地系統」服務,它可以執行您想要的任務並從您的網絡服務接收命令。

編輯: 如果「TheirService」可以被修改,那麼你可以從你的服務,並反過來發送給它的命令,它會根據this answer重新啓動。