5

我也安装了 VS 2012 Professional 和 XP 更新。我在 VS 2012 上使用平台工具集构建了我的项目v110_xp。我的项目的 .msi 包在 Win 7 上安装良好,但在 Win XP SP3 上安装失败。XP SP3 上报告的错误是 -

“无法在动态链接库 Kernel32.dll 中找到过程入口点 FlushProcessWriteBuffers”。

虽然从 VS 2005 构建的同一项目在 XP SP3 上安装良好。我不确定 VS 2012 发生了什么。_WIN32_WINNT设置为0x0501. 有人可以指导如何解决问题吗?

非常感谢任何帮助,

马赫什。

4

3 回答 3

13

是的,C 运行时依赖于 FlushProcessWriteBuffers()。msvcrt110.dll 和 libcmtl.lib 的更新版本,与更新一起获得的,不再直接链接到该函数,它们使用 GetProcAddress() 找到它,如果它丢失,它们会一瘸一拐地走。所以你永远不应该得到这个错误。

您部署错误版本的 msvcrt110.dll(旧版本而不是更新版本)的可能性非常高。您可以在 c:\windows\system32 中找到它,查看属性。我的是版本 11.00.51106.1,日期为 2012 年 11 月 5 日。此处提供了一个单独的安装程序。

于 2012-12-09T21:28:25.743 回答
3

您正在安装的 VS2012 运行时使用 XP 中不存在的功能。请参阅这篇 MS 文章:在 Visual Studio 2012 中使用 C++ 定位 Windows XP,其中解释了更多信息并提供了一些解决方法。

VS2012 的更新 1解决了这个问题。

但更新 1 不仅仅是关于新的 Windows 平台。它还使您能够使用 Visual Studio 2012 中的本机 C++ 应用程序以 Windows XP 为目标。

如果您正在使用更新 1 构建并且仍然遇到问题,那么我怀疑您正在安装过时的运行时。您需要部署更新 1 提供的运行时。

于 2012-12-09T20:58:07.547 回答
0

您可以通过在安装程序中包含开发机器中的 VC11 合并模块(程序文件\通用文件\合并模块)来解决此问题。这比在安装程序中运行 redist exe 更容易。

如果您使用 WIX:合并模块添加

我已经在服务器 03、xp64 和 xp32 上进行了测试。

于 2013-03-07T22:27:51.300 回答