我发现了article关于如何通过调用 CoCreateInstanceAsAdmin
来提升用C++编写的COM对象。但是我没能找到或做的是一种将.NET(c#)应用程序的组件作为COM对象实现的方法,然后调用该对象来执行需要UAC提升的任务。 MSDN将其记录为admin COM object model。如何UAC使用.NET提升COM组件
我知道,以管理员身份启动应用程序(或其他应用程序),以在单独的进程中执行任务是可能的和相当容易的(例如,请参阅post from Daniel Moth,但我在寻找的是在同一个未升级的.NET可执行文件中执行所有操作,这样做当然会在新进程中产生COM对象,但是由于透明编组,.NET COM对象的调用者不应该是(太多了)知道它
任何关于如何使用C#编写的COM对象,从C#项目到CoCreateInstanceAsAdmin
API的任何想法都会非常有帮助,因此我非常有兴趣学习如何编写一个C#中的COM对象,我可以通过COM从C#中调用它提升API。
不要紧,如果提升的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
呼叫我的主要应用。但也许我只是在做梦。
谢谢您的反馈;运行一个单独的托管过程并不是我想要的。我真的很喜欢能够与提升的COM组件交互,就好像它是一个本地对象(即提升的COM组件应该能够回调到其他本地.NET对象中)。 – 2009-05-27 07:50:12