我正在尝试验证我的用户是否有权控制 MSDTC 服务,以便在关闭时可以启动它。实际上,第一步只是验证它是否已经启动,能够启动它并不重要。该应用程序使用 .Net 4.0,因此在新的安全模型下运行。
以下代码在与具有所需权限的用户一起运行时有效,但在普通用户(非管理员)的 Stop() 方法上失败:
var permission = new ServiceControllerPermission(ServiceControllerPermissionAccess.Control, Environment.MachineName, "MSDTC");
permission.Demand(); // Is this even considered in .Net 4.0?
var MSDTC = new ServiceController("MSDTC", Environment.MachineName);
MSDTC.Stop(); // Crashes with "Access is denied" for an ordinary user.
MSDTC.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10));
MSDTC.Start();
所以,我的问题是如何验证用户是否具有运行操作所需的权限?一般来说,我如何检查其他资源,如寄存器等?
我环顾四周寻找解决方案,但没有找到任何东西。当然,我已经阅读了有关新安全模型的 MSDN 文档,但没有找到任何我可以在这种情况下使用的东西。