Cómo UAC elevar un componente COM con .NET

He encontrado unartículo sobre cómo elevar un objeto COM escrito en C ++ llamandoCoCreateInstanceAsAdmin. Pero lo que no he podido encontrar o hacer, es una forma de implementar un componente de mi aplicación .NET (c #) como un objeto COM y luego llamar a ese objeto para ejecutar las tareas que necesitan elevación de UAC. MSDN documenta esto como eladmin modelo de objeto COM.

Soy consciente de que es posible y bastante fácil iniciar la aplicación (u otra aplicación) como administrador, para ejecutar las tareas en un proceso separado (consulte, por ejemplo, elpost de Daniel Moth, pero lo que busco es una forma de hacer todo desde el mismo ejecutable .NET sin elevar. Al hacerlo, por supuesto, se generará el objeto COM en un nuevo proceso, pero gracias al ordenamiento transparente, la persona que llama al objeto .NET COM no debería (demasiado) ser consciente de ello.

Cualquier idea sobre cómo podría instanciar un objeto COM escrito en C #, desde un proyecto C #, a través deCoCreateInstanceAsAdmin API sería muy útil. Así que estoy realmente interesado en aprender a escribir un objeto COM en C #, que luego puedo invocar desde C # a través de las API de elevación de COM.

No importa si el objeto COM elevado no se ejecuta en el mismo proceso. Simplemente no quiero tener que lanzar toda la aplicación elevada; Solo me gustaría que el objeto COM que ejecutará el código sea elevado. Si pudiera escribir algo a lo largo de las líneas:

// in a dedicated assembly, marked with the following attributes:
[assembly: ComVisible (true)]
[assembly: Guid ("....")]

public class ElevatedClass
{
    public void X() { /* do something */ }
}

y luego tener mi aplicación principal solo instanciateElevatedClass a través deCoCreateInstanceAsAdmin llamada. Pero tal vez solo estoy soñando.

Respuestas a la pregunta(3)

Su respuesta a la pregunta