1

我正在尝试部署我的项目并创建一个安装程序。我创建了一个 .vdproj,它有一个输出 setup.msi 运行 .msi 设置向导时,我收到错误:

“模块 xyz 注册失败。HRESULT -2147024769。请联系您的支持人员。”

注册失败的模块是 C++ dll,而我的应用程序是 WFF-C# 应用程序。

有谁知道这个问题的解决方案?

4

3 回答 3

0

错误是 0x8007007F(十六进制),转换为Windows 错误代码 127 (0x7F)ERROR_PROC_NOT_FOUND。问题可能是因为 proc DllRegisterServer(用于注册由该程序集导出的 COM 类型的标准 proc)不是由 DLL 导出的。您可能需要注册一个关联的类型库

否则,请参阅 Stack Overflow 上的类似问题,例如 LoadLibrary() 错误代码 127

于 2013-01-07T12:06:48.877 回答
0

可能有两个原因

  • 您尝试注册的 dll(使用安装程序)不是 activeX dll,因此不需要注册。标准 dll 不需要注册。您只需将其复制到系统文件夹或应用程序文件夹中。您应该尝试从尝试注册所有安装程序的安装程序中删除这些指令

  • 第二个 reson 可以按照 akron 的建议,您需要注册关联的类型库而不是 dll 本身。

您可以使用dependency walker找出它是什么类型的dll 以及与之链接的其他dll。

于 2013-01-07T14:28:22.943 回答
0

安装程序抱怨它无法在 DLL 中找到导出的函数来注册它,即DllRegisterServer 函数。当 DLL 实际上不是 COM 服务器时,您要求安装程序注册 DLL 的可能性很大。并非每个 C++ dll 都是 COM dll。大多数不是。

您应该能够以在代码中使用 DLL 的方式看到这一点。您通常通过添加对 DLL 或类型库的引用来使用 COM dll,并且您将在构建目录中拥有一个 Interop.Foo.dll 程序集。相反,您在代码中使用具有 [DllImport] 属性的非 COM dll。

将 DLL 的“Register”属性改回 vsdrpDoNotRegister 并重试。

于 2013-01-07T14:31:43.810 回答