Visual Studio 2010 Win32 应用程序无法在 Windows XP 上启动

Visual Studio 2010 Win32 App won't start on Windows XP

本文关键字:Windows XP 启动 Studio 2010 Win32 应用程序 Visual      更新时间:2023-10-16

我必须编写一个具有一些特定需求的简单应用程序:
1.它应该只包含一个exe文件,没有安装程序或外部DLL
2.它应该很小
3.它应该在任何Windows(Win32)平台上运行(至少在Windows XP上),而不需要对Windows安装进行任何修改(不依赖于.NET、JVM、MFC或Visual Studio可再发行文件)
4.它应该有一个简单的(基于对话框的)UI

我决定用C(C++)作为一个简单的Win32应用程序,只使用标准的win32api,不使用花哨的东西。我用Visual Studio 2010在64位Windows 7上创建了这个项目,并将运行库从多线程DLL更改为仅多线程。我认为这将产生尽可能与Windows兼容的应用程序。

编译后的应用程序在我的Windows 7上运行良好,但我无法在任何Windows XP PC上启动它。我在Windows XP SP2和SP3上都尝试过。奇怪的是,我在活动管理器中没有收到任何错误消息,也没有流氓进程,当我双击exe文件时,什么都没有发生。并且没有生成DrWatson日志。

我已经在项目设置中检查了目标机器,它是MachineX86。

我已经在谷歌上搜索了很多关于这个问题的信息,其中一个提示是修改targetver.h,但我做了很多都没有结果。这就是我的targetver.h现在的样子:

#include <WinSDKVer.h>
#define _WIN32_WINNT      _WIN32_WINNT_WINXP
#include <SDKDDKVer.h>

我也尝试过依赖助行器,但它只显示一个名为DWMAPI.DLL的延迟加载DLL并出错,它似乎是一个Vista DLL。还有另外两个延迟加载DLL的警告,MPR.DLL和SHLWAPI.DLL。但由于它们是延迟加载的,我认为我没有在其中使用任何东西,所以这应该无关紧要(在谷歌上搜索显示这些警告应该被忽略)。

我的目标是能够编译一个在XP机器上运行的exe,而无需对其进行任何修改。

我解决了这个问题。当我说我做的是简单的Win32,没有花哨的东西时,这并不完全是真的。当我在现代操作系统上运行时,我不想有XP之前那种炫耀的外观和感觉,所以我在stdafx.h中添加了这些行(遵循我在网上找到的提示):

#define ISOLATION_AWARE_ENABLED 1
#pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"")

我没有提到这一点的原因是,我已经尝试过删除这些行,但它仍然不起作用(我仍然不明白为什么当我删除这些行时它不起作用,我不止一次尝试过)。

但在阅读了更多MSDN文章后,我发现这些行需要在windows.h之前,所以我移动了它,现在它可以工作了(既有经典风格,也有xp风格)

所以问题似乎是我在windows.h的include的错误一侧更改了ComCtl32的第6版,但我仍然不知道为什么当我删除这些行时它不起作用。Windows会以某种方式缓存清单吗?

也许您在XP机器上需要这个:MSVC 2010运行时

尝试创建一个静态链接到C运行库的程序。

在解决方案的项目中执行以下操作:转到"属性"|"配置"|"C/C++"|"代码生成"|"运行库"。

发布:将/MD更改为/MT,多线程。调试:将/MDd更改为/MTd,调试多线程。

如果你想继续使用动态链接,那么按照@dbrank()的建议,将MSVC++运行时文件复制到你的XP机器中。然而,你在最初的帖子中表示,你想要一个没有额外文件可复制的独立.exe。