C# 一个windows服务试图启动另一个:访问被拒绝

C# 一个windows服务试图启动另一个:访问被拒绝,c#,windows-services,C#,Windows Services,我正在生产服务器上运行Windows服务。如果服务因任何原因崩溃,我们必须立即恢复,这一点非常重要,因此我编写了一个监视服务,其唯一目的是不断检查主服务是否已启动并运行,如果未启动,则发出求救信号。它还应该启动停止的服务。。。这是不起作用的部分: public static void CheckService(string checkServiceName, string myServiceName, bool restartIfStopped = false) { var ctl =

我正在生产服务器上运行Windows服务。如果服务因任何原因崩溃,我们必须立即恢复,这一点非常重要,因此我编写了一个监视服务,其唯一目的是不断检查主服务是否已启动并运行,如果未启动,则发出求救信号。它还应该启动停止的服务。。。这是不起作用的部分:

public static void CheckService(string checkServiceName, string myServiceName, bool restartIfStopped = false)
{
    var ctl = ServiceController.GetServices()
         .FirstOrDefault(s => s.ServiceName == checkServiceName);
    var error = "";
    if (ctl == null)
        error = "{0} is not installed!".Fmt(checkServiceName);
    else if (ctl.Status != ServiceControllerStatus.Running)
    {
        error = "{0} is in status {1}".Fmt(checkServiceName, ctl.Status);
        if (restartIfStopped)
            try
            {
                ctl.Start();
                // no error = success
                error += "\r\nService was automatically restarted.";
            }
            catch (Exception ex)
            {
                // send to windows application log
                Log("Failed to restart service:\r\n"+ex, myServiceName, EventLogEntryType.Warning);
            }
    }
    // other code here to send out email notifications
}
问题是,当我尝试使用
ctl.Start()
重新启动服务时,它会在应用程序日志中出现以下错误:

无法重新启动服务:

System.InvalidOperationException:无法在计算机“”上打开MyService服务。-->System.ComponentModel.Win32异常:访问被拒绝

这两项服务都设置为使用“网络服务”运行。我已在两个可执行文件夹上授予“网络服务”的完全安全权限


还有什么可能导致这种情况?

您可以将服务设置为在出现故障时重新启动(如上所述)。

它看起来像是一种管理权限

我会尝试两件事

  • 将应用程序清单添加到解决方案中,有关更多详细信息,请参阅:

  • 授予手动权限


  • 转到c://Program Files/ApplicationFolder/.exe右键单击.exe并转到属性,然后转到Compability选项卡并选中true以管理员级别运行此程序。

    如果我没有弄错,您可以将服务设置为在出现故障时自动重新启动?@Gabrienegut您说得对!看见你想把它作为一个答案,为了荣誉?我很高兴它有帮助。我添加它作为一个答案(与您提供的链接)。谢谢!我已将此标记为正确答案,但如果有人随后提出了“拒绝访问”问题的特定解决方案,我将给予他们信任。requestedExecutionLevel=“requireAdministrator”uiAccess=“false”你能更清楚地解释一下如何做这些步骤吗?已经为第一步和第二步添加了链接。嗯。。。我认为让这些服务以管理权限运行有点过分。必须有一种更专注、更准确的方法来解决这个问题。