我在C#中编写了一个程序集,我需要从VB6.0应用程序调用DLL上的方法。
我使DLL COM兼容并相应地注册DLL。从我的VB应用程序中,我将使用VB6.0 CreateObject
方法在.NET程序集中实例化该类。
Set dotNetObj = CreateObject("Namespace.ClassName")
然后我就可以在该类上调用任何方法。
问题:
一切正常,直到我尝试在Vista计算机上执行代码。每当我执行exe它工作正常,但每当使用“以管理员身份运行”选项执行exe时,会出现以下错误:
“ActiveX组件无法创建 对象“。
我需要此EXE以管理模式运行,否则遗留系统的某些区域将无法工作。
关于CreateObject
无法在管理模式下工作的任何想法?
答案 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