I ve found an article on how to elevate a COM object written in C++ by calling
CoCreateInstanceAsAdmin
. But what I have not been able to find or do, is a way to implement a component of my .NET (c#) application as a COM object and then call into that object to execute the tasks which need UAC elevation. MSDN documents this as the admin COM object model.
我知道,作为管理员启动应用程序(或另一个应用程序),在单独的过程中执行任务是可能的,而且非常容易(例如,请参阅来自Daniel Moth的帖子,但我正在寻找一种在同一个未提升的.NET可执行文件中执行所有操作的方法。这样做当然会在新进程中生成COM对象,但由于透明编组,.NET COM对象的调用方不应该(太)知道它。
任何关于如何通过<code>CoCreateInstanceAsAdmin</code>API从C#项目中实例化用C#编写的COM对象的想法都将非常有用。因此,我非常感兴趣的是学习如何用C#编写COM对象,然后我可以通过COM提升API从C#调用它。
如果提升的COM对象不在同一进程中运行,请不要介意。我只是不想启动整个提升的应用程序;我只想提升将执行代码的COM对象。如果我能这样写:
// in a dedicated assembly, marked with the following attributes:
[assembly: ComVisible (true)]
[assembly: Guid ("....")]
public class ElevatedClass
{
public void X() { /* do something */ }
}
然后让我的主应用程序通过CoCreateInstanceAsAdmin
调用初始化ElevatedClass
。但也许我只是在做梦。