我在一篇文章中发现了如何通过调用
我知道可以并且很容易以管理员身份启动应用程序(或另一个应用程序),以在单独的进程中执行任务(例如,参见Daniel Moth的文章),但我正在寻找的是一种方法从同一个未提升的.NET可执行文件中完成所有操作。当然,这样做会在新进程中生成COM对象,但由于透明封送,调用者不应太多地意识到.NET COM对象的存在。
如果您有任何想法,可以帮助我了解如何从C#项目中以
CoCreateInstanceAsAdmin
来提升使用C++编写的COM对象。但是我没有找到或做到的是,以一种方式实现我的.NET(c#)应用程序组件作为一个COM对象,然后调用该对象以执行需要UAC提升的任务。MSDN将此文档化为管理员COM对象模型。我知道可以并且很容易以管理员身份启动应用程序(或另一个应用程序),以在单独的进程中执行任务(例如,参见Daniel Moth的文章),但我正在寻找的是一种方法从同一个未提升的.NET可执行文件中完成所有操作。当然,这样做会在新进程中生成COM对象,但由于透明封送,调用者不应太多地意识到.NET COM对象的存在。
如果您有任何想法,可以帮助我了解如何从C#项目中以
CoCreateInstanceAsAdmin
API的方式实例化使用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
。但也许这只是我的梦想。