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