Я нашел статью о том, как поднять COM-объект, написанный на С++, путем вызова
CoCreateInstanceAsAdmin
. Но то, что я не смог найти или сделать, - это способ реализовать компонент моего приложения .NET(С#) в качестве COM-объекта, а затем вызвать этот объект для выполнения задач, требующих повышения UAC. MSDN документирует это как административную COM-модель объекта.
Я знаю, что можно и довольно просто запустить приложение (или другое приложение) в качестве администратора для выполнения задач в отдельном процессе (см., например, сообщение от Daniel Moth, но то, что я ищу, - это способ сделать все из одного и того же невыполненного исполняемого файла .NET. Это, конечно же, вызовет COM-объект в новый процесс, но благодаря прозрачной сортировке вызывающий объект .NET COM не должен (слишком много) знать об этом.
Любые идеи относительно того, как я могу создать объект COM, написанный на С#, из проекта С#, через API CoCreateInstanceAsAdmin
, будут очень полезны. Поэтому мне действительно интересно узнать, как написать COM-объект в С#, который затем я могу вызвать из С# через API-интерфейсы COM-уровня.
Не обращайте внимания, если повышенный COM-объект не запускается в том же процессе. Я просто не хочу запускать все приложение повышенным; Я бы просто хотел, чтобы объект COM, который будет выполнять код, будет повышен. Если бы я мог написать что-то по строкам:
// in a dedicated assembly, marked with the following attributes:
[assembly: ComVisible (true)]
[assembly: Guid ("....")]
public class ElevatedClass
{
public void X() { /* do something */ }
}
а затем мое основное приложение просто инициирует ElevatedClass
через вызов CoCreateInstanceAsAdmin
. Но, возможно, я просто мечтаю.