从其他服务重新启动NetworkService服务

时间:2012-07-26 20:40:06

标签: c# .net windows-services

我有一个以ServiceService运行的Windows服务MyService(在C#中实现)。 MyService需要启动另一个第三方服务TheyService,它也作为NetworkService运行。尝试从MyService尝试使用此代码时,尝试启动他们的服务失败并显示访问被拒绝错误:

    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;
    }

他们服务的SID信息:

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

有没有办法从C#以编程方式从MyService启动他们的服务?

编辑:目标 - 作为MyService安装的一部分,我希望能够重新启动他们的服务。

2 个答案:

答案 0 :(得分:1)

将服务设置为运行的并不重要。您需要升级到管理员才能启动/停止Windows服务。

或者,您可以grant NetworkService permission控制它,但这些授权需要由管理员进行,可能在您安装服务时。它还会削弱第三方服务的安全性,因为任何以NetworkService身份运行的人都可以重新启动它,这会破坏NetworkService帐户的最低权限目的。

答案 1 :(得分:1)

您需要提升此服务的权限。黑客将拥有一个中间“本地系统”服务,它可以执行您想要的任务并从您的网络服务接收命令。

修改 如果可以修改“他们的服务”,那么您可以从服务中向其发送命令,反过来,它会根据this answer重新启动。