我有一个本地服务在我的计算机上运行,并试图让其他计算机能够读取我的服务的状态(无论是正在运行、已停止等)但是,我无法做到,因为我收到了 InvalidOperationException 错误,说我无法打开服务控制管理器。在本地,我可以,但在另一台远程计算机上我不能。ServiceController (cs) 对象只返回一个对象,其属性都具有 InvalidOperationException 错误。
我尝试关闭其他计算机上的所有防火墙,尝试以管理员权限运行 Visual Studio,但似乎没有任何效果。我注意到其他人建议对您的管理员凭据进行硬编码并使用 WindowsIdentity 和 Impersonation 但这对我的项目不起作用(因为它在我的工作场所不是一个可行的解决方案 - 对于业务逻辑没有意义不想给客户任何内部凭证)。
这是我的代码片段:
public bool CheckServiceStatus()
{
try
{
string machineName = pubSubConfig.MachineName;
string serviceName = pubSubConfig.ServiceName;
System.ServiceProcess.ServiceController cs = new System.ServiceProcess.ServiceController(serviceName, machineName);
if (cs != null && cs.ServiceName == serviceName && cs.Status == System.ServiceProcess.ServiceControllerStatus.Running)
{
return true;
}
}
catch(Exception ex)
{
Trace.TraceError("Unable to check service status: /r/n {0}", ex.Message);
}
return false;
}
错误是这样的:
System.InvalidOperationException: Cannot open Service Control Manager on computer '___'.
This operation might require other privileges. ---> System.ComponentModel.Win32Exception: Access is denied
有谁知道关于如何让其他计算机运行我的 C# 程序以能够读取 ServiceController 对象的任何解决方法?
谢谢!