我找到了一篇关于如何通过调用
CoCreateInstanceAsAdmin
. 但是我无法找到或做的是一种将我的 .NET (c#) 应用程序的组件实现为 COM 对象然后调用该对象以执行需要 UAC 提升的任务的方法。MSDN 将此记录为管理 COM 对象模型。
我知道以管理员身份启动应用程序(或另一个应用程序)是可能且非常容易的,以在单独的进程中执行任务(例如参见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 */ }
}
然后让我的主应用程序ElevatedClass
通过CoCreateInstanceAsAdmin
调用进行实例化。但也许我只是在做梦。