使用ServiceController控制服务,而不是使用services.msc,启用UAC

时间:2013-12-17 11:44:20

标签: c#-4.0 servicecontroller

我正在开发一个管理构成某些产品的服务的应用程序。 到目前为止,可以预见此应用程序是以提升开始的(因此用户必须确认UAC提示)。 似乎对于大多数操作而言,不需要提升,例如开始停止服务。

应用程序通常由本地Administrators组的成员运行;这些人可以启动services.msc,然后他们可以启动和停止服务。所以我期待它“正常工作”:

ServiceController sc = new ServiceController(Environment.MachineName, "MyServiceApp");
sc.Start();

失败并出现“拒绝访问”异常。 所以我添加了

ServiceControllerPermission scp = 
    new ServiceControllerPermission(ServiceControllerPermissionAccess.Control, Environment.MachineName, "MyServiceApp");
scp.Demand();
ServiceController sc = new ServiceController(Environment.MachineName, "MyServiceApp");
sc.Start();

需求成功,Start仍然失败。

我在StackExchange上阅读了很多有关ServiceController和安全问题的问题(和答案);很多答案都表明需要提升。由于我(我是本地Administrators组的成员)可以启动和停止使用services.msc,所以不要购买它。

那么怎么了services.msc - 以及我的代码是什么?我确实启用了UAC,我不想禁用它。 要启动或停止服务,不需要提升,对吧?否则services.msc也需要提升? (我的一位同事建议services.msc包含一些'特殊代码''使其正常工作';我也不买。)

感谢您的回答。

2 个答案:

答案 0 :(得分:0)

Services.msc(mmc.exe)不一定以提升/管理权限运行。

你可以制作一些“特殊代码”,要求Windows以升级的方式运行你的程序。您将使用manifest文件。

How do I force my .NET application to run as administrator? https://stackoverflow.com/a/4084620/787893

答案 1 :(得分:0)

我建议你尝试WMI来启动和停止服务,有关WMI方法的更多信息,.Net在codeplex上检查这个项目:

==> Services+