Visual Studio 2010 Win32 应用程序无法在 Windows XP 上启动
Visual Studio 2010 Win32 App won't start on Windows XP
我必须编写一个具有一些特定需求的简单应用程序:
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。
- std::async from std::async in windows xp
- 如何在Visual Studio 2017中编译Windows XP的代码
- 如何构建使用Visual Studio 2017的Windows XP的Winsock2(WS2_32.LIB)应用程序
- WinHttpSendRequest and HTTPS on Windows XP
- 功能本地静态为Windows XP生成故障代码
- SHOpenWithDialog analog for windows XP?
- 如何检查操作系统是否至少是Windows XP SP3
- 使用Visual Studio 2012针对Windows XP构建Boost 1.52库
- 使用 Build Tools 2015 (不带 Visual Studio) 面向 Windows XP
- 有任何替代SHGetKnownFolderPath的Windows XP用户令牌的方案吗
- 当Windows XP(32位,SP3)播放声音时,随机应用程序暂停半秒钟
- 函数从windows XP中的数据包中检索标头目标地址
- GetConsoleScreenBufferInfoEx equivalent for windows XP?
- 如何跟踪Windows 7是否在C ++中以编程方式进入睡眠或休眠状态,就像在Windows XP中所做的那样
- 如何从Windows XP下的程序中知道或更改Windows事件日志的大小
- 带Realtek Alc888的活动耳机插孔(Windows XP)
- 如何使用Visual Studio 2012编译Windows XP
- Visual C 2012 Express Compied Application在Windows XP上不起作用
- 为 Windows XP 编译的应用程序无法在 Windows 7 上运行
- 检测本地化的 Windows XP 安装的系统语言