我正在开发一个管理构成某些产品的服务的应用程序。 到目前为止,可以预见此应用程序是以提升开始的(因此用户必须确认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包含一些'特殊代码''使其正常工作';我也不买。)
感谢您的回答。
答案 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+