2012-07-26 145 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重新启动。

相关问题