首页 文章

Visual Studio 2010 Win32 App无法在Windows XP上启动

提问于
浏览
1

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

我决定在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>

我也尝试了依赖walker,但它只显示和错误的延迟加载DLL称为DWMAPI.DLL,这似乎是一个Vista DLL . 还有两个其他延迟加载的DLL,MPR.DLL和SHLWAPI.DLL的警告 . 但由于它们是延迟加载的,我不认为我在其中使用任何东西它应该没关系(谷歌搜索显示这些警告应该被忽视) .

我的目标是能够编译一个可以在XP机器上运行的exe而不对它们进行任何修改 .

3 回答

  • 1

    我解决了这个问题 . 当我说我没有花哨的东西作为普通的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的包含的错误方面更改为ComCtl32的版本6,但我仍然不知道为什么当我删除这些行时它不起作用 . Windows可以以某种方式缓存清单吗?

  • 0

    也许你需要在XP机器上使用它:MSVC 2010 runtime

  • 0

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

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

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

    如果要继续使用动态链接,请按照@dbrank()的建议将MSVC运行时文件复制到XP机器中 . 但是,您在原始帖子中声明您需要一个独立的.exe,无需复制额外的文件 .

相关问题