【发布时间】:2011-03-26 17:49:39
【问题描述】:
似乎提升特权是大多数开发人员经常遇到的问题,因为大多数时候他们根本没有。我是这样做的,但我正在与一个庞大的后台工作程序作斗争,我试图将我的代码保持在将要使用它的类的本地。鉴于我的后台工作人员在“RunWorkerCompleted”处理程序方法内完成后所做的代码和引用量,证明很难接受这是一个可行的替代方案:
我的后台工作人员对我的 MainForm 类的依赖实在太多,以至于我无法考虑将整个解决方案发送到具有“管理员”权限的单独进程中。这涉及太多的切碎和改变。
阅读了 70-536 考试的 CAS 后,我了解上述示例中的大部分术语,但我不知道它是如何以及为什么起作用的?有人可以解释为什么将权限授予“ManagersOnly”方法吗?一旦 PrincipalPolicy 更改为 WindowsPrincipal,接下来的两个步骤看起来就像普通的对象实例化语句,如下所示:
System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal, IPrincipal, IIdentity);
显然,不存在这样的重载,但它非常清楚该重载的作用。
问题 1: OmegaCoders 示例是如何实现这种效果的?因为它肯定可以工作,因为我的用户是“BUILTIN\Administrators”组的一部分。我正在寻找基于文献的答案,因此请尽可能详细地了解。
更新 1:
问题 2: 我如何将 PrincipalPolicy 恢复到之前的状态...一旦方法返回,我不需要 PrincipalPolicy 仍设置为“WindowsPrincipal”???这样该应用程序就可以按照我的意图以较低权限的用户身份继续运行。
问题 3: 一旦 'ManagersOnly' 方法返回,权限是否被丢弃?它是否仅限于方法的生命周期?
System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.NoPrincipal);
*更新 2:*
这很困难,因为在我的 Win7 Pro 开发机器上我可以测试和运行任何东西,但是当我尝试在简单的 Win7 Home 笔记本电脑上测试一些代码时,我发现权限被拒绝。这引出了将 PrincipalPolicy 更改为“WindowsPrincipal”的问题,它不适用于所有 vista 和 Win7 用户,因为许多用户甚至不会成为管理员用户组的一部分。所以这个选项没用......坐在这台小型笔记本电脑上很明显这不是我需要的解决方案。
忽略以前的问题 - 根据我自己的研究,我已经完成了它们是不可行的。
问题 4:如何以编程方式临时在代码中冒充管理员?
【问题讨论】:
标签: c# winforms .net-3.5 cas role-based