У меня есть несколько служебных методов, использующих 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, не должно выполняться с повышенные права? Очевидно, нет?
Спасибо за помощь!