.NET进程无法创建ActiveX对象

.NET进程无法创建ActiveX对象

问题描述:

我正在点击我理解的墙。我有一个简单的COM服务器,我想实例化。我可以简单的VBS这样做或PS命令我EXE外:.NET进程无法创建ActiveX对象

$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作出错误消失。任何CPU和x86都会失败。这是否意味着我必须为我的32位和64位工作站创建2个EXE版本?

+0

本文可能有所帮助:[在x64 Windows上使用32位或64位ActiveX组件](http://cknotes.com/using-32-bit-or-64-bit-activex-components-on- x64-windows /) – TnTinMn

这并不意味着您必须创建两个实例。只要制作AnyCPU,您就应该可以创建一个。问题是,你必须使用正确的运行时注册它。默认情况下,Visual Studio在64位机器上使用32位运行时注册AnyCPU。如果确保使用64位运行时和正确版本的运行时运行regasm.exe,则应该能够从64位进程调用它。

但是,在我的商店中,我们通常编译一个用于x86和一个用于x64,并为正确的平台部署正确的一个。

+0

我其实有很多这方面的经验,并且因为某些原因只是有糟糕的一天。试图缩小我从Any CPU切换到x86的原因,但未注意到“首选32位”选项。我错误地认为我的进程运行64位并将其标记为可能的原因。这让我备份在一个角落,强调问什么可能导致如此简单的事情。 –