簡體   English   中英

.NET進程無法創建ActiveX對象

[英].NET Process can't create ActiveX Object

我撞到了我了解的牆。 我有一個要實例化的簡單COM服務器。 我可以通過EXE之外的簡單VBS或PS命令來執行此操作:

$sms_client = New-Object -COM 'CPApplet.CPAppletMgr'

Set controlPanelAppletManager = CreateObject("CPApplet.CPAppletMgr") 

在我的C#代碼中,我嘗試了早期綁定,后期綁定,PS運行空間/管道以及最后Process.Start(cscript myVBS)。 在所有這些情況下,它都返回未注冊的類並失敗。

//throws exception
CPAPPLETLib.CPAppletMgr cpAppletMgr= new CPAPPLETLib.CPAppletMgr();

// myType does not come back null
Type myType = Type.GetTypeFromProgID("CPApplet.CPAppletMgr");
// throws exception
object myObject = Activator.CreateInstance(myType);

更新:我可以毫無問題地創建Scripting.FileSystemObject。 我不需要...這只是一個測試。

我嘗試編譯32位,64位。 以標准用戶身份運行並提升權限。 我嘗試再次注冊DLL,但是有關C#.NET EXE的某些操作卻無法看到COM。 我什至嘗試創建一個全新的控制台應用程序項目,並且它也在其中進行。

我是否缺少.NET 101 COM-Interop基礎知識?

Retrieving the COM class factory for component with CLSID {096C5BA8-044B-4BAC-9914-144723BA4F2A} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

更新:

將平台設置為x64可使錯誤消失。 AnyCPU和x86失敗。 這是否意味着我必須為32位和64位工作站創建EXE的2個版本?

這不一定意味着您必須創建兩個實例。 只要使它成為AnyCPU,就應該只能創建一個。 問題是,您必須在正確的運行時中注冊它。 默認情況下,Visual Studio在64位計算機上向32位運行時注冊AnyCPU。 如果確保使用64位運行時和正確版本的運行時運行regasm.exe,則應該能夠從64位進程中調用它。

但是,在我的商店中,我們通常為x86編譯一個,為x64編譯一個,並為合適的平台部署合適的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM