8

编辑说明:在微软从他们的客户那里得到了关于 drop-XP 特技的大量不良反馈之后,他们宣布将发布一个补丁,允许为 XP 构建可执行文件。所以这个 Q 的基础并不存在,但我认为它收集了一些非常有趣的信息。


如此处所述:使用 Visual Studio 11 编译的可执行文件有什么特别之处,导致可执行文件无法在 Windows XP 上执行?

在此 Connect 错误/问题中:https ://connect.microsoft.com/VisualStudio/feedback/details/690617,Visual Studio 11(计划于 2012 年发布)计划不再支持 Windows XP。

这意味着您无法创建可以在 Windows XP 上执行的本机 C++ 可执行文件。(一个原因是新的 CRT 将使用仅在 Windows Vista 和更高版本上可用的 Windows API 调用。)

一个答案中,安德斯写道:

他们似乎在每个新版本的 VS (NT4,2000,XP) 中都放弃了对旧系统的支持......

现在让我感兴趣的是,微软从 VS11 C++ 中完全放弃 Windows XP 支持的举动是否真的可以与以前的版本进行比较。

我的意思是,什么时候完全从 Visual C++ 中删除了对哪个操作系统(NT3.5 / NT4 / 2000sp6 // Win95 / Win98 / ...)的支持。(以及 Visual C++ 的“哪一部分”——编译器、CRT、Windows SDK?)

例如,我想我知道 VC6 是 VS 的最后一个版本,可用于创建在 Windows NT4 上运行的可执行文件。我似乎还记得,放弃对 Win2k 的支持更多地与您使用的 Windows SDK 相关,而不是与实际的编译器或 CRT 相关,但我不确定。

是否有一个很好的资源可以显示哪个 MS 编译器在哪个设置中可以为哪个操作系统版本生成兼容的代码?VS11(2012 年)的时间是否不再支持与以前版本相当的广泛安装(但不再销售)的操作系统?


有趣的一点是,我们正处于从 C++03 到 C++11 的转变过程中,如果您坚持使用 Windows XP 和 VC10,那么您就会陷入有限的(部分非-standard) 它必须提供的 C++11 支持。

4

3 回答 3

8

我认为将 VS 的发布日期与 Windows 版本不受支持的时间进行比较是有意义的,而不是 Windows 版本的发布时间。

一旦操作系统达到扩展支持的终点,它就会停止获取安全更新,并且任何仍在运行它的人都可以被认为是疯狂的和被忽视的(除了非常特殊的情况)。在此之前,人们仍然使用旧的操作系统版本并期望软件支持它们似乎是合法的(尽管有时很烦人)(当然,第三方和微软本身的供应商都可以选择不这样做)。

根据 Wikipedia,这是每个版本的 Windows 变得(或将变得)不受 Microsoft 支持的时间:

  • 2020 年 1 月:Windows 7
  • 2017 年 4 月:Windows Vista
  • 2014 年 4 月:Windows XP
  • 2010 年 7 月:Windows 2000
  • 2006 年 7 月:Windows ME
  • 2006 年 7 月:Windows 98
  • 2004 年 6 月:Windows NT 4
  • 2001 年 12 月:Windows 95
  • 2001 年 12 月:Windows NT 3

将其与现有答案中的细节联系起来:

  • VS 在 2012 年放弃了 Windows XP,尽管它直到 2014 年才被支持。
  • VS 在 2010 年放弃了不久后过期的 Windows 2000。
  • VS 在 2007 年放弃了已经过期的 Win98/ME。
  • VS 在 2005 年放弃了已经过期的 Win95 和 NT4。

所以看起来 VS2012 是第一个将放弃对操作系统的支持的版本,该操作系统本身仍将支持至少一年。假设所有这些日期都是正确的(我没有仔细检查它们;这样做主要是出于我自己的好奇)。

于 2012-04-04T22:45:38.273 回答
4

假设您只是在谈论最低支持的 32 位 Windows 桌面版本,以及来自 Microsoft 的客户支持。

  • VC11(2012 年):Windows Vista(2007 年)
  • VC10(2010 年):Windows XP SP3(2008/2001 年)
  • Windows SDK 6.1:Windows XP(2001 年)
  • VS2008(2007 年):Windows 2000 SP4(2003 年)。最新的安全更新放弃了对 Windows 2000 的支持。
  • 适用于 Windows Vista 的 Windows SDK 更新:Windows 2000 (y 2000)
  • VS2005(2005 年):Windows 98(1998 年)、Windows 2000 Service Pack 3、Windows XP、Windows NT 3(1993 年)。SP1 放弃了 9 倍的支持。最新的安全更新放弃了对 Windows 2000 的支持。
  • VC6(1998 年):Windows 95(1995 年)、Windows NT ??
    • 编译器可以通过 Visual C++ Toolkit 2003 升级
    • 平台 SDK 可以升级到 2003 年 2 月版的 Windows 2003 SDK。

对 64 位操作系统的支持各不相同,但一个很好的指标是目标操作系统在发布时是否仍受支持。第一个支持 64 位的 SDK 稳定版本是 VC2005。

黑客(可能会导致更多问题)

  • 修补可执行文件
    • Visual C++ 编译器:有一个 /SUBSYSTEM 和一个 /OSVERSION 开关,它们的默认值随时间而变化,但如果您知道 PE 格式,您可以通过编译器开关或使用十六进制编辑器轻松修改该值。
    • 如果您确信调用新 API 的代码不会在您的程序中被触及,请修改可执行文件以删除新的API 调用。
  • CRT/MFC/ATL
于 2011-12-12T17:50:58.080 回答
2

Microsoft 已经宣布,Visual Studio 2012 将包含对构建针对 Windows XP 的 C++ 应用程序的支持,因此这确实使 2012 在这方面与以前版本的 Visual Studio 相当。

http://blogs.msdn.com/b/vcblog/archive/2012/06/15/10320645.aspx

于 2012-09-14T10:55:57.653 回答