我正在开发一个管理构成某些产品的服务的应用程序。到目前为止,可以预见该应用程序是以提升启动的(因此用户必须确认 UAC 提示)。似乎对于大多数操作来说,不需要提升,例如启动停止服务。
该应用程序通常由本地管理员组的成员运行;这些人可以启动 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();
需求成功,启动仍然失败。
我在 StackExchange 上阅读了很多关于 ServiceController 和安全问题的问题(和答案);很多答案表明需要提升。由于我(我是本地管理员组的成员)可以开始和停止使用 services.msc,所以不要购买它。
那么 services.msc 怎么了?我的代码怎么了?我确实启用了 UAC,但我不想禁用它。要启动或停止服务,不需要提升,对吧?否则 services.msc 也需要提升吗?(我的一位同事建议 services.msc 包含一些“使它工作”的“特殊代码”;我也不买那个)。
感谢您的任何回答。