Vista中的VB6 .NET互操作问题

时间:2009-06-05 09:31:19

标签: c# .net vb6 windows-vista interop

我在C#中编写了一个程序集,我需要从VB6.0应用程序调用DLL上的方法。 我使DLL COM兼容并相应地注册DLL。从我的VB应用程序中,我将使用VB6.0 CreateObject方法在.NET程序集中实例化该类。

Set dotNetObj = CreateObject("Namespace.ClassName")

然后我就可以在该类上调用任何方法。

问题:

一切正常,直到我尝试在Vista计算机上执行代码。每当我执行exe它工作正常,但每当使用“以管理员身份运行”选项执行exe时,会出现以下错误:

  

“ActiveX组件无法创建   对象“。

我需要此EXE以管理模式运行,否则遗留系统的某些区域将无法工作。

关于CreateObject无法在管理模式下工作的任何想法?

2 个答案:

答案 0 :(得分:1)

听起来好像COM组件只能为用户注册 - 所以当管理员尝试它时,clsid是未知的。尝试为管理员运行您的isntallation / registration流程。

(vista是否将clsids放入HKCU?或只是HKLM?)

快速搜索似乎表明它与UAC是启用还是禁用有关...启用它后,它在HKCU中看起来...禁用,它在HKLM中查找。因此,如果您要安装到HKCU,那么禁用UAC的管理员就不会在那里。

答案 1 :(得分:0)

因为它只在用户空间注册?

尝试在管理员shell中注册您的dll

regasm mycomponent.dll /register /codebase /tlb