【发布时间】:2014-02-20 15:53:55
【问题描述】:
场景是我以管理员身份运行服务。
我们有一个运行自定义代码的标注(想想脚本)。它使用 codedom 编译来创建程序集并创建类型并调用方法(基于代码)。
我想在调用期间暂时放弃管理员权限,然后再恢复它们。
【问题讨论】:
-
那么,是什么阻止了你?
-
我不知道该怎么做。我正在想象创建一个实现 IDisposable 并在构造函数中丢弃海拔并在析构函数中恢复它的类,但我不知道删除海拔并恢复它的调用是什么。我想我可能需要知道海拔的当前“状态”才能在以后恢复它。
-
您能否从单独的进程(从服务启动)调用调用?如果可能,请参阅stackoverflow.com/q/1173630。
-
我确实在一个单独的应用程序域中运行,但该应用程序域进行编译和执行。我猜想编译需要执行不需要的权限。例如:我将我的 dll 编译到磁盘。所以我想在我实际调用代码的调用期间降低海拔。
-
从 Windows 的角度来看,通常发生的情况是,您有一个具有较低海拔的二进制文件并调用另一个需要临时更高海拔的二进制文件。在 .NET 中,您可以创建一个“沙箱”以在较低的高度运行代码,但这必须在不同的 AppDomain 中运行。