从应用程序访问服务控制器时访问被拒绝

从应用程序访问服务控制器时访问被拒绝

我有一个用 c# mvc 编写的 Web 应用程序,它试图检查 Windows 服务的状态,无论是停止还是启动。我已经编写了代码,但问题是代码在我的本地开发机器上运行良好,但当推送到服务器时,代码会出错,指出访问被拒绝。

我有以下代码:

            try
            {
                using (ServiceController sc = new ServiceController("Service"))
                {
                    if (sc.Status == ServiceControllerStatus.Running)
                    {
                        //do something
                    }
                }
            }
               catch (Exception ex) { }; 
           } 

上述代码在服务控制器本身上不断失败。

我也尝试使用以下代码:

    StringBuilder sb = new StringBuilder();
    Process process = new System.Diagnostics.Process();
    ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();

    startInfo.FileName = @"sc";
    startInfo.Arguments = "query \"My Service\"";
    startInfo.UseShellExecute = false;
    process.StartInfo = startInfo;
    process.OutputDataReceived += (sender, args) => 
    sb.AppendLine(args.Data);
    process.StartInfo.RedirectStandardOutput = true;
    process.Start();
    process.BeginOutputReadLine();
    process.WaitForExit();

上述两个代码在服务控制器/ SC 本身上持续失败。

错误是

无法在计算机“。”上打开服务控制管理器。此操作可能需要其他权限。

我们的应用程序在服务帐户下的 IIS 中运行,并且我们已授予该帐户管理员权限和远程访问权限。

不确定这里还需要提供什么。是否有访问 Windows 服务的特定权限?

答案1

尝试以“LocalSystem”身份运行您的代码,这也是一个良好的背景;https://stackoverflow.com/questions/39326284/cant-query-run-or-stop-a-windows-service

相关内容