只有在安装Visual Studio之后,C ++程序才能在XP SP2上运行

时间:2012-04-09 11:47:57

标签: c++ visual-studio winapi windows-xp

我有一个C ++程序。它非常简单 - 显示图像(启动画面)并启动另一个应用程序,然后在启动其他应用程序时关闭。实际上,这个:http://www.olsonsoft.com/blogs/stefanolson/post/A-better-WPF-splash-screen.aspx只有很小的变化(我的启动画面图像和我的程序启动而不是样本)。

它在我的Windows 7开发人员计算机上运行良好。它也适用于安装了Windows XP SP2和Visual Studio 2008的另一台(虚拟)机器。但它不适用于没有Visual Studio的同一个虚拟Windows XP SP2计算机。它显示错误:“入口点memmove_s无法位于动态链接库msvcrt.dll中”。

我发现可能出现的问题是在WindowsCodec DLL中(在清除XP SP2安装中没有这样的DLL,但它在带有Visual Studio的XP SP2的Windows / system32文件夹中)所以我将它复制到了明确的应用程序文件夹中系统。之后程序部分工作(启动后启动另一个应用程序),但没有显示启动画面图像。

安装Microsoft Visual C ++ Redistributable Package(2008年和2010年)没有帮助。

我发现在Visual Studio中使用静态链接的建议(项目属性中的多线程(/ MT)选项 - > C / C ++ - >代码生成),但它也是没有帮助。

我也尝试过DependencyWalker,但找不到两个测试系统的依赖关系的差异。

任何人都有任何想法为什么会发生这种情况?我是C ++的新手,希望这是我不知道的显而易见的东西......

2 个答案:

答案 0 :(得分:3)

您的程序依赖于.NET框架,至少是3.0版。默认情况下,在XP SP2安装中不可用。如果您没有看到windowscodecs.dll,那么您没有安装正确版本的.NET。这在安装VS2008时确实有效,因为它也安装了.NET。

下载is here

答案 1 :(得分:1)

C ++程序依赖于编译它的crt库的特定版本。如果正在运行的系统在本地程序目录或系统WinSxS目录中没有该版本。这是使用VS 2005或2008编译的C ++程序的特定问题。有关详细信息,请参阅此处:http://en.wikipedia.org/wiki/Side-by-side_assembly

如果使用VS 2010,您可能会看到此问题消失,因为它使用不同的方法进行依赖项解析。