Я нашел статью о том, как поднять COM-объект, написанный на C ++, с помощью вызова
CoCreateInstanceAsAdmin
. Но то, что я не смог найти или сделать, - это способ реализовать компонент моего приложения .NET (c #) в виде COM-объекта, а затем вызвать этот объект для выполнения задач, требующих повышения UAC. MSDN документирует это как объектную модель admin COM .
Мне известно, что можно и довольно легко запустить приложение (или другое приложение) от имени администратора, выполнить задачи в отдельном процессе (см., Например, сообщение от Daniel Moth , но я ищу способ сделать все из одного и того же невыполненного исполняемого файла .NET, что, конечно, вызовет COM-объект в новом процессе, но благодаря прозрачному маршаллингу, вызывающему COM-объект .NET не должен (слишком много) осознавать это.
Любые идеи относительно того, как я мог бы создать COM-объект, написанный на C #, из проекта C # через CoCreateInstanceAsAdmin
API, были бы очень полезны. Поэтому мне очень интересно узнать, как написать COM-объект на C #, который я затем могу вызывать из C # через 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
. Но, может быть, я просто сплю.