我有一个用 VS2010 开发的 32 位应用程序,但是依赖项walker 说它依赖于一个名为 mfc100u.dll 的 64 位文件。
这里的问题是某些计算机无法启动该应用程序。
我无法找到有关此的明确信息。该文件是否有 32 位和 64 位版本?如果是这样,我如何确保 32 位应用程序使用一个版本而 64 位应用程序使用另一个版本?(如果这些应用程序在同一个目录中?)
如果 32 位有不同的名称,它是什么?
我有一个用 VS2010 开发的 32 位应用程序,但是依赖项walker 说它依赖于一个名为 mfc100u.dll 的 64 位文件。
这里的问题是某些计算机无法启动该应用程序。
我无法找到有关此的明确信息。该文件是否有 32 位和 64 位版本?如果是这样,我如何确保 32 位应用程序使用一个版本而 64 位应用程序使用另一个版本?(如果这些应用程序在同一个目录中?)
如果 32 位有不同的名称,它是什么?
Dependency walker 通常可以指示 DLL 的 64 位,但这是错误的。在运行 32 位应用程序时,WOW64 使用称为文件系统重定向器的东西:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa384187(v=vs.85).aspx
所有对 System32 目录的请求都被重定向到 syswow64 文件夹(无论您是否希望它们)。
如果包含 64 位 DLL,应用程序将不会加载,您会在启动时收到某种“坏图像”错误。
尝试运行 32 位版本的 Dependency Walker,看看它是否适合您。
更新: MFC 和 C 运行时的 32 位和 64 位版本具有相同的名称。它们通常使用可再分发的 MSI 文件进行部署,Windows 将在运行时处理链接。但是,如果您绝对必须将特定版本链接到您的应用程序,则需要将它们部署在与您的应用程序相同的文件夹中。不要尝试在同一个文件夹中混合 32/64 位版本。以下是微软对这个主题的看法:
http://msdn.microsoft.com/en-us/library/ms235264.aspx
注意:为了使事情复杂化,同一文件有不同的可再发行版本,例如 VS2010 SP1 版本。
msvcr100.dll 不是为在 Windows 上运行而设计的,或者它包含错误。尝试使用原始安装介质重新安装程序,或联系您的系统管理员或软件供应商支持。