2009-06-05 77 views
1

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

Set dotNetObj = CreateObject("Namespace.ClassName") 

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

问题:

所有工作正常,直到我尝试了Vista的机器上执行代码。每当我执行exe文件,它工作正常,但无论何时使用“以管理员身份运行”选项执行的exe出现以下错误:“ActiveX组件不能老是创建 对象”

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

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

+0

我只需要切换InstallAllUsers属性设置为TRUE在我的包和部署软件。 – MegaByte 2009-06-05 11:58:05

回答

1

听起来像是COM组件只注册了用户--所以当管理员试用它时,clsid是未知的。尝试运行管理员的分析/注册流程。

(不远景放的CLSID在HKCU?或者只是HKLM?)

快速搜索似乎表明,它涉及到UAC是否启用或禁用...它使它看起来HKCU ...残疾人,它看起来在HKLM。因此,如果您正在安装到HKCU,那么对于禁用UAC的管理员,它将不会在那里。

+1

我只需要在我的包和部署软件中将InstallAllUsers属性切换为TRUE。 – MegaByte 2009-06-05 11:58:02

0

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

尝试注册你的DLL在管理员外壳

regasm mycomponent.dll /register /codebase /tlb

+0

对于一个.NET DLL,它更可能是regasm或类似的... – 2009-06-05 09:39:47