我有一个用 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