【问题标题】:32 bit application does not start (0xC000007b) after vc_redist 64 bit has been installed安装 vc_redist 64 位后 32 位应用程序未启动 (0xC000007b)
【发布时间】:2013-09-12 13:33:29
【问题描述】:

我们正在新的 Win 7 64 虚拟机上测试应用程序部署。

到目前为止,我们安装了 vc_redist_x86 并且我们的 32 位应用程序运行没有问题。

现在,随着我们转向 64 位构建,我们的先决条件安装程序安装了 Visual Studio 2012 的 vc_redist_x86 和 vc_redist_x64。

此设置允许我们运行 64 位测试应用程序,但这会破坏我们的 32 位构建。

可执行文件生成 0xC000007B 消息。

现在奇怪的部分:dependency walker 显示 msvcr110.dll 是 64 位的。 (full resolution)

两个 redist 都显示在程序中。 然后我尝试卸载正确完成的 64 位 redist,但依赖 walker 显示与它没有效果相同的问题。

我只有在还原 VM 并仅安装 x86 redist 时才能使用它

【问题讨论】:

  • 很难解释。但是后来 DependencyWalker 已经很久没有维护了,已经不能胜任这项工作了。 32 位程序应该使用来自 c:\windows\syswow64 的 DLL,而不是 c:\windows\system32
  • 我不会说因为 2012 年的 msdn 文档仍然引用依赖 walker 并且它具有 64 位支持 (msdn.microsoft.com/en-us/library/ms235265%28v=vs.110%29.aspx) 但您的观点是有效的,尽管我需要深入研究应用程序如何解析这是依赖项
  • 嗯,使用 procmon 进行更深入的分析表明,在我的开发和测试机器上,两个应用程序都从 SysWOW64 配置单元获取 msvcr 和 msvcp dll。卸载 64 redist 从 system32 中删除了 msvcr110.dll,我仍然在 SysWOW64 中看到一个

标签: c++ visual-c++


【解决方案1】:

答案仍不清楚,但与 InstallShield 的安装程序有关。

当我们通过单独的先决条件安装程序安装依赖项时,当同时选择 vcredists 和 msvcr 的合并模块时,它似乎会产生不稳定的设置。

删除合并模块并完全依赖 vcredist 似乎现在可以工作了。

(注意:InstallShield 2012 Spring LE 中 vcredist x86 2012 的 prq 似乎也有问题,因为它从未由安装程序安装,可能是由于 prq 操作系统条件的问题。关于 SO 的解决方案建议使用来自 2010 redist prq 的条件,这对我们来说很有效。由于提供的 LE 版本作为微软安装程序的不良替代品没有提供 prq 编辑器,手动编辑 prq xml 文件是可能的,但主要是猜测)

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 2012-01-19
    • 2012-02-02
    • 1970-01-01
    • 2013-03-11
    • 2013-08-13
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多