Como UAC elevar um componente COM com o .NET

Eu encontrei umartigo sobre como elevar um objeto COM escrito em C ++ chamandoCoCreateInstanceAsAdmin. Mas o que eu não fui capaz de encontrar ou fazer, é uma maneira de implementar um componente do meu aplicativo .NET (c #) como um objeto COM e, em seguida, chamar esse objeto para executar as tarefas que precisam de elevação do UAC. MSDN documenta isso como omodelo de objeto COM de administração.

Estou ciente de que é possível e muito fácil iniciar o aplicativo (ou outro aplicativo) como administrador, para executar as tarefas em um processo separado (ver, por exemplo,post de Daniel Moth, mas o que estou procurando é uma maneira de fazer tudo a partir do mesmo executável .NET não elevado. Fazer isso, é claro, gerar o objeto COM em um novo processo, mas, graças ao empacotamento transparente, o chamador do objeto COM .NET não deve estar ciente disso (em excesso).

Qualquer idéia de como eu poderia instanciar um objeto COM escrito em c #, de um projeto c #, através doCoCreateInstanceAsAdmin API seria muito útil. Então, estou realmente interessado em aprender a escrever um objeto COM em C #, que depois invoco de C # por meio das APIs de elevação COM.

Não importa se o objeto COM elevado não for executado no mesmo processo. Eu só não quero ter que lançar toda a aplicação elevada; Eu gostaria apenas de ter o objeto COM que executará o código seja elevado. Se eu pudesse escrever algo ao longo das linhas:

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

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

e então ter meu aplicativo principal apenas instanciateElevatedClass através deCoCreateInstanceAsAdmin ligar. Mas talvez eu esteja apenas sonhando.

questionAnswers(3)

yourAnswerToTheQuestion