我正在尝试部署我的项目并创建一个安装程序。我创建了一个 .vdproj,它有一个输出 setup.msi 运行 .msi 设置向导时,我收到错误:
“模块 xyz 注册失败。HRESULT -2147024769。请联系您的支持人员。”
注册失败的模块是 C++ dll,而我的应用程序是 WFF-C# 应用程序。
有谁知道这个问题的解决方案?
我正在尝试部署我的项目并创建一个安装程序。我创建了一个 .vdproj,它有一个输出 setup.msi 运行 .msi 设置向导时,我收到错误:
“模块 xyz 注册失败。HRESULT -2147024769。请联系您的支持人员。”
注册失败的模块是 C++ dll,而我的应用程序是 WFF-C# 应用程序。
有谁知道这个问题的解决方案?
错误是 0x8007007F(十六进制),转换为Windows 错误代码 127 (0x7F)ERROR_PROC_NOT_FOUND
。问题可能是因为 proc DllRegisterServer(用于注册由该程序集导出的 COM 类型的标准 proc)不是由 DLL 导出的。您可能需要注册一个关联的类型库。
否则,请参阅 Stack Overflow 上的类似问题,例如 LoadLibrary() 错误代码 127。
可能有两个原因
您尝试注册的 dll(使用安装程序)不是 activeX dll,因此不需要注册。标准 dll 不需要注册。您只需将其复制到系统文件夹或应用程序文件夹中。您应该尝试从尝试注册所有安装程序的安装程序中删除这些指令
第二个 reson 可以按照 akron 的建议,您需要注册关联的类型库而不是 dll 本身。
您可以使用dependency walker找出它是什么类型的dll 以及与之链接的其他dll。
安装程序抱怨它无法在 DLL 中找到导出的函数来注册它,即DllRegisterServer 函数。当 DLL 实际上不是 COM 服务器时,您要求安装程序注册 DLL 的可能性很大。并非每个 C++ dll 都是 COM dll。大多数不是。
您应该能够以在代码中使用 DLL 的方式看到这一点。您通常通过添加对 DLL 或类型库的引用来使用 COM dll,并且您将在构建目录中拥有一个 Interop.Foo.dll 程序集。相反,您在代码中使用具有 [DllImport] 属性的非 COM dll。
将 DLL 的“Register”属性改回 vsdrpDoNotRegister 并重试。