¿Cómo usar ServerManager para leer sitios IIS, no IIS express, de la biblioteca de clases O cómo manejan los procesos elevados las bibliotecas de clases?

Tengo algunos métodos de utilidad que usanMicrosoft.Web.Administration.ServerManager con el que he tenido algunos problemas. Utilice el siguiente código simple muerto con fines ilustrativos.

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

Si pongo ese código directamente en una aplicación de consola y lo ejecuto, obtendrá y enumerará los sitios web de IIS express. Si ejecuto esa aplicación desde un símbolo del sistema elevado, enumerará los sitios web de IIS7. Un poco incómodo, pero hasta ahora tan bueno.

Si, en cambio, pongo ese código en una biblioteca de clase a la que hace referencia y llama la aplicación de consola, SIEMPRE mostrará una lista de los sitios de IIS Express, incluso si la aplicación de consola está elevada.

Google me ha llevado a probar lo siguiente, sin suerte.

//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");

Evidentemente, he entendido mal algo en la forma en que se ejecuta un proceso "elevado". ¿No debería todo lo que se ejecuta en un proceso elevado, incluso el código de otro dll, debe ejecutarse con derechos elevados? ¿Evidentemente no?

¡Gracias por la ayuda

Respuestas a la pregunta(8)

Su respuesta a la pregunta