繁体   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