将VS2008编译为与Windows 7兼容的二进制文件

时间:2010-08-09 22:20:19

标签: windows visual-studio visual-c++ backwards-compatibility

我正在使用Microsoft Visual Studio 2008(VC9)编译具有.dsw文件的项目。我已经拥有2010年并且更愿意使用它,但似乎这款dsw是为2008年制造的。

我想编译并生成一个兼容Windows 7的二进制文件。我的问题:

  • 如果我使用2008编译,生成的二进制文件是否与Windows 7兼容?我不确定哪个版本的VS支持Windows 7。
  • 或者这与VS版本无关,而是与Windows SDK相关吗?如果是这种情况,我可以将VS2008与更新的Windows SDK一起使用吗?

有人可以澄清一下。

3 个答案:

答案 0 :(得分:5)

Microsoft具有很好的向后兼容性“故事”,因此使用任何版本的Visual Studio / Visual C ++编译的任何内容都将与Windows 7兼容。反过来也可能不一致,即如果您使用API在Windows 7中引入的,当您尝试在以前版本的Windows上运行它时,您的应用程序将会出错。

但有几件事需要考虑:

  • 如果项目最初写入目标Windows XP或更早版本,则可能会违反UAC
  • 目录结构(例如%systemdrive%\Documents and Settings成为%systemdrive%\Users)的更改由Windows 7在`%systemdrive%的根目录中创建的链接处理得很好,但您可能会犯规这些。

答案 1 :(得分:2)

VS2010包含Windows SDK 7.0版,而VS2008则没有。如果您希望应用程序利用跳转列表等Windows 7功能,则需要Windows SDK v7.0。

由于您已经安装了VS2010,因此您只需将VS2008中的include文件/ lib文件路径更改为指向Windows SDK v7.0,而不是VS2008提供的默认路径。这假设您需要该版本的SDK。

如果您不打算使用最新的Windows 7功能(如功能区和跳转列表),则不需要最新的Windows SDK。如果您正在为最低通用分母操作系统(即Windows XP)构建应用程序,那么使用默认设置的VS 2008确实应该没问题。

另一个问题是,如果您的代码最初是在Windows Vista发布之前编写的,那么它很可能在Windows 7上无法正常运行,除非它在管理员模式下运行,这是您想要避免的。解决这个问题的唯一方法是重写大部分代码,以避免写入某些受保护的目录,并避免使用某些需要管理员权限的API。

答案 2 :(得分:0)

Windows SDK完全向后兼容。有关详细比较,请参阅binary compatibility report工具生成的x86_64上的Windows 6.0和Windows 7.0之间的abi-compliance-checker

其他Windows版本的报告位于:https://abi-laboratory.pro/index.php?view=windows

enter image description here