代码之家  ›  专栏  ›  技术社区  ›  IbrarMumtaz

如何模拟WinForms、C#应用程序的Windows内置管理员角色?

  •  1
  • IbrarMumtaz  · 技术社区  · 16 年前

    似乎特权的提升是大多数开发人员经常遇到的问题,因为大多数时候他们根本没有特权。我是这样做的,但我正在与一个庞大的后台工作者例程作斗争,我正在努力使我的代码保持在将要使用它的类的本地。鉴于我的后台工作人员在“RunWorkerCompleted”处理程序方法中完成了大量的代码和引用,很难接受它作为可行的替代方法:

    HOMEWORK 1:

    HOMEWORK 2:

    HOMEWORK 3:

    我的后台工作人员对MainForm类的依赖太多了,我无法考虑将整个解决方案发送到一个带有“Admin”privs的单独进程中。这涉及太多的切碎和改变。

    Omega Coder:

    System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal, IPrincipal, IIdentity);
    

    显然,不存在这样的过载,但过载的作用是非常明显的。

    问题1:

    更新1:

    问题2:

    一旦'ManagersOnly'方法返回,权限是否被丢弃?它是否适用于方法的生命周期?

    System.AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.NoPrincipal);
    

    *更新2:*

    这是很困难的,因为在我的win7pro-dev机器上,我可以测试和运行任何东西,但是当我在一台简单的win7home笔记本电脑上测试一些代码时,我发现权限被拒绝了。这就引出了一个问题:将PrincipalPolicy更改为“WindowsPrincipal”并不适用于所有vista和Win7用户,因为许多用户甚至不属于admin用户组。所以这个选项没用。。。坐在这台小型笔记本电脑上,这显然不是我需要的解决方案。

    问题4:如何在代码中以编程和临时方式模拟管理员?

    1 回复  |  直到 9 年前
        1
  •  1
  •   IbrarMumtaz    16 年前

    简言之,答案是否定的。

    在我做了这么多的挖掘之后,似乎没有一种提升方法权限的方法,因为CAS称赞RBS,所以如果用户不是正确组的一部分。那么,甚至访问管理员权限都没有意义,因为rbs告诉cas该用户不是组的一部分,因此请求被拒绝,权限被拒绝。导致异常。

    长话短说的答案是,把容易出现问题的代码放到一个单独的.exe文件中,然后分别运行它。