0

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

    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 启动TheyService?

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

4

2 回答 2

1

服务设置为以何种方式运行并不重要。您需要提升为管理员才能启动/停止 Windows 服务。

或者,您可以授予 NetworkService控制它的权限,但这些授权需要由管理员进行,也许在安装您的服务时。它还削弱了第 3 方服务的安全性,因为任何作为 NetworkService 运行的人都可以重新启动它,这违背了 NetworkService 帐户的最低权限目的。

于 2012-07-26T20:45:04.060 回答
1

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

编辑: 如果可以修改“TheirService”,那么您可以从您的服务向它发送一个命令,然后它会根据这个答案自行重启。

于 2012-07-26T20:51:42.537 回答