我發現了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