【发布时间】: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++