从C#启动远程服务

我在C#WinForms应用程序中使用以下代码在远程PC上启动Windows服务

public static List GetServices() { List Services = new List(); ServiceController[] sc = ServiceController.GetServices(Server); foreach (var s in sc) { Services.Add(new Service { Name = s.ServiceName, Running = s.Status == ServiceControllerStatus.Running }); } return Services; } public static bool StartService(string ServiceName) { try { ServiceController sc = new ServiceController(ServiceName, Server); sc.Start(); sc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 10)); sc.Refresh(); return sc.Status == ServiceControllerStatus.Running; } catch(Exception ex) { return false; } } 

指向我的本地PC或远程PC时,GetServices方法可以正常工作。 然而,StartService方法仅适用于我的本地PC,当在远程PC上运行时,我被拒绝访问。 在这种情况下,远程PC是同一域上的Windows XP专业版机器,我正在运行该应用程序的用户具有本地管理员权限。

我不确定这是我的代码的问题,还是我的权限不正确。

如果这是权限问题,请告诉我,我会尝试询问ServerFault。

谢谢

如果结果是,您只需要启动和停止窗口服务的权限,而不是拥有管理员权限,您可以修改服务的DACL。

基本上有两种方法可以做到这一点。

1)执行安全描述符定义语言(SDDL)字符串。

2)inheritance自NativeObjectSecurity并在ServiceInstaller_AfterInstall方法期间应用DACL更改。

事实certificate这是一个权限问题。 我正在使用虚拟机进行测试,我们的VM在我们的域上拥有不同的访问权限。