DirectoryEntry.NativeObject выбрасывает запрещенный доступ для пользователя в группе администраторов в Windows 2008 - PullRequest
2 голосов
/ 05 ноября 2008

У меня есть локальный пользователь, который входит в локальную группу администраторов.

Когда я запускаю этот код:

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);
        }
    }
}

Я получаю:

Необработанное исключение: System.Runtime.InteropServices.COMException (0x80070005): доступ запрещен.

в System.DirectoryServices.DirectoryEntry.Bind (Boolean throwIfFail) в System.DirectoryServices.DirectoryEntry.Bind () в System.DirectoryServices.DirectoryEntry.get_NativeObject () на nanttest.Program.Main (String [] args) в C: \ Work \ nanttest \ nanttest \ Program.cs: линия 20

Если я запускаю этот код во время входа в систему как администратор, он работает нормально.

Кроме того, этот код завершается ошибкой, если я запускаю его, выполнив вход в систему как пользователь DomainAdmin. Я добавил MYDOMAIN \ DomainAdmins и MYDOMAIN \ mydomainuser в качестве членов локальной группы администраторов.

Какие еще разрешения я должен добавить для этих пользователей, чтобы они могли запускать этот код.

1 Ответ

6 голосов
/ 05 ноября 2008

Чтобы ответить на мой вопрос, чтобы другие могли найти решение:

Проблема связана с настройками UAC по умолчанию в Windows 2008. Даже если пользователь входит в группу «Администраторы», ему / ей по-прежнему необходимы повышенные привилегии для выполнения некоторых операций (одна из них, по-видимому, входит в их число).

Итак, решение 1 - запустите приложение с помощью «Запуск от имени администратора» или запустите его из командной строки, которая была запущена с этой опцией.

Решение 2. Отключите UAC для группы администраторов - я использовал метод № 3 из этой статьи (изменения в групповой политике). Не забудьте перезагрузить сервер после этих изменений.

...