【问题标题】:Will VS2008 compile binaries compatible with Windows 7VS2008 会编译兼容 Windows 7 的二进制文件吗
【发布时间】:2010-08-09 22:20:19
【问题描述】:

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

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

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

有人可以澄清一下吗?

【问题讨论】:

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


    【解决方案1】:

    微软有一个很好的向后兼容性“故事”,所以你用任何版本的 Visual Studio/Visual C++ 编译的几乎任何东西都将与 Windows 7 兼容。同样的情况不一定适用于反向,即如果你使用 API在 Windows 7 中引入,当您尝试在以前版本的 Windows 上运行时,您的应用程序会出错。

    不过有几点需要考虑:

    • 如果项目最初是针对 Windows XP 或更早版本编写的,则可能会违反 UAC
    • Windows 7 在 `%systemdrive% 的根目录中创建的链接可以很好地处理目录结构的更改(例如 %systemdrive%\Documents and Settings 变为 %systemdrive%\Users),但您可能会犯这些错误。

    【讨论】:

    • 最终,如果您想确保您的代码能够在 Win7 上运行,您将需要对其进行测试。它可能会运行,但您可能会遇到 UAC、注册表虚拟化、清单等问题。尝试下载应用程序兼容性工具包并通过它运行您的程序,这将突出显示问题区域,例如写入特权文件/注册表区域。
    • “您可能会在 UAC、注册表虚拟化、清单方面遇到问题” - 前提是您没有努力将软件从一开始就不需要管理权限。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      Windows SDK 很好地向后兼容。请参阅abi-compliance-checker 工具生成的 x86_64 上的 Windows 6.0 和 Windows 7.0 之间的binary compatibility report 进行详细比较。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-12
        • 2018-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多