我有旧的VB6插件(Visio)源代码,在编译时会生成DLL。我需要将此dll分发给最终用户,但是当我在用户PC上以管理员身份运行以下命令时:
regsvr32 MyAddin.dll
它抛出:
The Module "MyAddin.dll" was loaded but the call to DllRegisterServer failed with error code 0x80004005.
为调试此问题,我创建了一个新的VB6外接程序项目,在Connect.Dsr中将“应用程序”更改为“ Microsoft Visio”。并尝试将此dll安装到具有Visio的新Windows 10 VM。仍然出现相同的错误。
由于该dll在我的PC上可以运行,并且我的PC与VM /用户PC之间的唯一显着差异是VB6 Enterprise IDE,因此我在VM上安装了“ Visual Basic 6 Enterprise”,之后便可以在其中注册dll也一样显然,我不能要求最终用户安装Visual Basic 6 Enterprise,如何知道“ Addin”项目模板的依赖关系?还是应该在安装程序中捆绑VB 6 Enterprise的最低限度文件?
答案 0 :(得分:3)
Windows错误“ 0x80004005”特别是在由于不可预见的原因而拒绝用户访问应用程序,服务或设备的情况下发生。
来自https://docs.microsoft.com/en-us/sysinternals/downloads/procmon的Process Monitor可能会有所帮助。以管理员身份运行它,创建一个适当的过滤器,然后查看是否弹出有用的东西。
答案 1 :(得分:3)
最终VB6 Office加载项取决于加载项设计器对象库(msaddndr.dll),并且该库在Office 2013之后不可用
我注册了MSADDNDR.dll,它解决了问题。
有关更多详细信息,https://blogs.msdn.microsoft.com/vsod/2012/11/21/vb6-based-add-ins-may-fail-to-work-in-office-2013/