【发布时间】:2010-09-12 17:25:22
【问题描述】:
我找到了一个article,关于如何通过调用来提升用 C++ 编写的 COM 对象
CoCreateInstanceAsAdmin。但是我无法找到或做的是一种将我的 .NET (c#) 应用程序的组件实现为 COM 对象然后调用该对象以执行需要 UAC 提升的任务的方法。 MSDN 将此记录为admin COM object model。
我知道以管理员身份启动应用程序(或其他应用程序)是可能且非常容易的,以在单独的进程中执行任务(例如参见post from Daniel Moth,但我正在寻找的是一种在同一个未提升的 .NET 可执行文件中执行所有操作的方法。这样做当然会在新进程中生成 COM 对象,但是由于透明编组,.NET COM 对象的调用者不应该是(太多)意识到这一点。
任何关于如何通过CoCreateInstanceAsAdmin 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。但也许我只是在做梦。
【问题讨论】:
标签: c# com uac elevation moniker