我有一个.NET MVC3应用程序,该应用程序需要能够打开和关闭远程服务。为此,我通过WindowsIdentity.Impersonate()模拟了一个特定的用户帐户。要测试用户的权限,我可以以用户身份登录并sc.exe \\[server] start [service]在命令提示符下执行。我还知道模仿命令可以按预期工作,因为该应用程序以匿名方式运行,因此无法在.没有模仿的情况下控制本地计算机()上的服务,但可以通过模仿来控制本地服务。但是,当我将它们放在一起并尝试启动远程服务而不是本地服务时,总是出现错误“无法[service]在计算机' [server]' 上打开服务”
有没有人遇到过类似的问题?我一直以为它是服务器配置而不是.NET问题,直到我意识到sc.exe可以正常工作。这是我正在使用的类的缩写版本:
public class Service
{
public string Name;
public bool Running;
private ServiceController serviceController;
public Service(string name, string host)
{
Name = name;
serviceController = new ServiceController(Name, host);
Running = serviceController.Status == ServiceControllerStatus.Running;
}
public bool StartService()
{
ServiceControllerPermission scp = new ServiceControllerPermission(ServiceControllerPermissionAccess.Control, serviceController.MachineName, Name);
scp.Assert();
serviceController.Start();
serviceController.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 5));
serviceController.Refresh();
Running = serviceController.Status == ServiceControllerStatus.Running;
return Running;
}
} …Run Code Online (Sandbox Code Playgroud)