Как использовать ServerManager для чтения сайтов IIS, а не IIS Express, из библиотеки классов ИЛИ как процессы с повышенными привилегиями обрабатывают библиотеки классов?

У меня есть несколько служебных методов, использующих Microsoft.Web.Administration.ServerManager , с которыми у меня возникли некоторые проблемы. Используйте следующий мертвый простой код в целях иллюстрации .

using(var mgr = new ServerManager())
{
    foreach(var site in mgr.Sites)
    {
        Console.WriteLine(site.Name);
    }
}

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

Если вместо этого я помещу этот код в библиотеку классов, на которую ссылается и вызывает консольное приложение, он ВСЕГДА будет перечислять сайты IIS Express, даже если консольное приложение имеет повышенные права.

Google привело меня к тому, что я попробовал следующее, но безуспешно.

//This returns IIS express
var mgr = new ServerManager();
//This returns IIS express
var mgr = ServerManager.OpenRemote(Environment.MachineName);
//This throws an exception
var mgr = new  ServerManager(@"%windir%\system32\inetsrv\config\applicationhost.config");

Очевидно, я неправильно понял что-то в том, как работает процесс с повышенными правами. Разве все, что выполняется в процессе с повышенными правами, даже код из другой DLL, не должно выполняться с повышенные права? Очевидно, нет?

Спасибо за помощь!

35
задан Josh 11 December 2011 в 22:08
поделиться