繁体   English   中英

Visual Studio 2010 Win32 App无法在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应用程序进行,并且仅使用标准的win32 api,没有花哨的东西。 我在64位Windows 7上使用Visual Studio 2010创建了该项目,并将运行库从多线程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并显示错误,该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包含的错误一侧更改为ComCtl32的版本6,但是我仍然不知道为什么在删除这些行时它不起作用。 Windows可以某种方式缓存清单吗?

也许您在XP计算机上需要此: MSVC 2010运行时

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

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

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

如果要继续使用动态链接,请按照@dbrank()的建议将MSVC ++运行时文件复制到XP计算机中。 但是,您在原始帖子中说过,您想要一个没有复制其他文件的独立.exe。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM