VS 2012 - XP问题

5
我安装了VS 2012 Professional和XP更新补丁。我在VS 2012上使用v110_xp作为平台工具集构建了我的项目。我的项目的.msi包在Win 7上安装正常,但在Win XP SP3上失败。XP SP3报告的错误是:

"The procedure entry point FlushProcessWriteBuffers could not be located in the dynamic link library Kernel32.dll".

而从VS 2005构建的同一项目在XP SP3上安装正常。我不确定VS 2012出了什么问题。_WIN32_WINNT设置为0x0501。请问有人可以指导如何解决这个问题吗?

非常感谢您的帮助。

Mahesh。


根据MSDN的说明,该函数只适用于Vista及以上版本。 - chris
@chris 我明白了。但是我不明白的是,为什么在使用VS 2005构建包时它能够正常工作。 - Mahesh
因为VS2005运行时不会尝试链接到该函数。但是您部署的VS2012运行时会这样做。 - David Heffernan
谢谢你的问题,它对我也很有帮助。我只是在想为什么我们会犯同样的错误 :p - Stan
3个回答

13

是的,C Runtime 依赖 FlushProcessWriteBuffers()。更新后的 msvcrt110.dll 和 libcmtl.lib(与更新一起获取的那些)不再直接链接到该函数,它们使用 GetProcAddress() 来查找并在缺少时进行替代。所以您永远不应该收到此错误。

因此,非常有可能您部署了错误版本的 msvcrt110.dll,旧版本而不是更新的版本。您可以在 c:\windows\system32 找回它,查看其属性。我的版本为 11.00.51106.1,日期为 2012 年 11 月 5 日。可通过此处获取单独的安装程序。


你说得对。我打包了错误的dll文件。我的项目正在构建并放置了正确的dll文件进行打包。我会告诉你它的进展情况。希望在XP上成功 :) - Mahesh
抱歉,我不太明白。您能详细说明一下吗? - Mahesh
4
这不太顺利。为什么不直接使用我提供的安装程序,然后解决问题呢?然后你可以花费任何时间来找出你的问题所在。 - Hans Passant
@Mahesh,很明显你的问题已经得到解答,我认为最后一个来自Hans的评论就是你需要的建议。 - David Heffernan

3
您正在安装的VS2012运行时使用了XP中不可用的函数。请参阅此MS文章:在Visual Studio 2012中使用C++针对Windows XP,其中更详细地解释了此问题并提供了一些解决方法。 Update 1 for VS2012解决了这个问题。

但Update 1不仅涉及新的Windows平台。它还使您能够在Visual Studio 2012中针对Windows XP使用本机C++应用程序。

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

1
有一个更新。现在有一个编译器可用。http://www.microsoft.com/visualstudio/eng/visual-studio-update#story-update-1 - chris
@David,你给了我一个提示。我在我的.msi中打包的C、C++运行时不是XP支持的最新版本。让我看看在使用支持的C、C++运行时之后会有什么结果。但无论如何,这个函数是在Kernel32.dll中查找的,而不是在C、C++运行时中。我还是会尝试一下。 - Mahesh
@Mahesh 我的最后一段与您刚才说的一样。您正在部署的 C 运行时正在寻找一个在 XP 中不存在的 Windows API 函数。该 API 函数位于 kernel32 中,但仅存在于 Vista 及更高版本中。因此,运行时尝试加载在 XP 上不存在的 kernel32 中的函数。问题出在运行时上。错误消息提到 kernel32 并不意味着问题出在 kernel32 中。 - David Heffernan
你是否部署了32位版本而不是64位版本,或者反之? - David Heffernan

0

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

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

我已在server 03、xp64和xp32上进行了测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接