一个窗口服务试图启动另一个:访问被拒绝

本文关键字:另一个 启动 访问 拒绝 一个 服务 窗口 | 更新日期: 2023-09-27 18:01:38

我在生产服务器上运行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()重新启动服务时,它会在应用程序日志中出现以下错误:

重启服务失败:

系统。无法在计算机'.'上打开MyService服务。——比;System.ComponentModel。Win32Exception: Access is denied

两个服务都设置为使用"网络服务"运行。我已授予"网络服务"完全安全权限。

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

一个窗口服务试图启动另一个:访问被拒绝

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

看起来像是一个行政许可。

我会尝试两件事

  1. 将应用程序清单添加到解决方案中,详细信息请参阅:http://www.codeproject.com/Questions/629067/How-to-add-a-manifest-file-in-my-project

  2. 给予Manual权限

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