.net 如何暂时降低标高

.net 如何暂时降低标高,.net,elevated-privileges,.net,Elevated Privileges,这个场景是我以管理员的身份运行一个服务 我们有一个运行自定义代码的调用(想想脚本)。它使用codedom编译来创建程序集、创建类型和调用方法(基于代码) 我想在调用期间暂时删除管理员权限,然后在调用结束后恢复这些权限。我认为您不能按照您描述的方式“删除”权限;您的服务正在以用户身份运行,并且该用户被允许一定的访问权限。你可以要求Windows临时授予你更多的权限(这就是UAC的全部内容),但你不能要求它给你更少的权限 我将在系统中创建第二个用户以运行脚本(具有适当较低的访问级别),并在自定义代码

这个场景是我以管理员的身份运行一个服务

我们有一个运行自定义代码的调用(想想脚本)。它使用codedom编译来创建程序集、创建类型和调用方法(基于代码)

我想在调用期间暂时删除管理员权限,然后在调用结束后恢复这些权限。

我认为您不能按照您描述的方式“删除”权限;您的服务正在以用户身份运行,并且该用户被允许一定的访问权限。你可以要求Windows临时授予你更多的权限(这就是UAC的全部内容),但你不能要求它给你更少的权限

我将在系统中创建第二个用户以运行脚本(具有适当较低的访问级别),并在自定义代码期间模拟该用户

[编辑] 结果我不知道我在说什么。根据这个链接,UAC是以相反的方式实现的,通过创建一组受限的权限并在该上下文中运行代码


我最终在沙盒应用程序域中运行了代码,如链接中所述:

如何:在沙箱中运行部分受信任的代码


那么,是什么阻止了你?我不知道该怎么做。我想象着创建一个类,实现IDisposable并在构造函数中删除提升,然后在析构函数中恢复它,但我不知道删除提升和恢复它的调用是什么。我想我可能需要知道立面的当前“状态”,以便以后能够恢复它。您可以从单独的流程(从服务启动)调用调用吗?如果可能,请参阅。我确实在单独的应用程序域中运行,但该应用程序域执行编译和执行。我猜编译需要执行时不需要的权限。例如:我将DLL编译到磁盘。所以我想在调用代码的过程中降低提升。通常情况下,从Windows的角度来看,您有一个提升较低的二进制文件,它调用另一个需要暂时提高提升的二进制文件。在.NET中,您可以创建一个“沙盒”以在较低的提升中运行代码,但它必须在不同的AppDomain中运行。