DirectoryEntry.NativeObject为Windows 2008中的Administrators组中的用户抛出拒绝访问

Sun*_*nov 2 .net permissions directoryservices administrator windows-server-2008

我有一个本地用户,它是Administrators本地组的成员.

当我运行此代码时:

using System;
using System.DirectoryServices;

namespace nanttest
{
    class Program
    {
        public static void Main(string[] args)
        {
            using(DirectoryEntry entry = new DirectoryEntry("IIS://localhost/W3SVC"))
            {
                object absobject = entry.NativeObject;
                Console.WriteLine("Name: {0}", entry.Name);
            }

            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到:

未处理的异常:System.Runtime.InteropServices.COMException(0x80070005):访问被拒绝.

在System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)中的System.DirectoryServices.DirectoryEntry.Bind()at System.DirectoryServices.DirectoryEntry.get_NativeObject()at nanttest.Program.Main(String [] args)in c:\ Work \nanttest \nanttest\Program.cs:第20行

如果我以管理员身份登录时运行此代码,则可以正常工作.

此外,如果我以DomainAdmin用户身份登录,则此代码将失败.我已将MYDOMAIN\DomainAdmins和MYDOMAIN\mydomainuser添加为本地Administrators组的成员.

我应该为这些用户添加哪些其他权限,以便他们可以运行此代码.

Sun*_*nov 6

要回答我自己的问题,其他人可以找到解决方案:

问题出在Windows 2008中的默认UAC设置.即使用户在Administrators组中,他/她仍然需要提升权限才能运行某些操作(上面的一个似乎是其中之一).

因此,解决方案1 ​​ - 使用"以管理员身份运行"运行应用程序,或者从使用该选项启动的命令提示符启动它.

方案2:禁用UAC的管理员组-我已经使用方法#3,从这篇文章(组策略更改).请记住在这些更改后重新启动服务器.