【问题标题】:what are the parameters taking attention of Windows compatibility?Windows 兼容性需要注意哪些参数?
【发布时间】:2013-06-03 11:05:08
【问题描述】:

我想知道在运行 exe 或安装程序期间可能需要注意 Windows 兼容性的参数或 API 是什么?每当我运行 exe 时,它​​都会调用 Windows 兼容性管理器。是因为错误使用了任何 WinAPI 吗?或者是否有其他参数可以引起 Windows 的注意以检查任何 exe 的兼容性?

【问题讨论】:

  • 我想,这就是嵌入在 .exe 或 .dll 中的清单(当然还有它的内容)
  • 嘿@ quetzalcoatl 我在谷歌搜索msdn.microsoft.com/en-us/library/windows/desktop/bb756937.aspx 时发现了这个链接,程序通常使用GetVersion 函数或GetVersionEx API 来获取有关它们运行的​​Windows 操作系统版本的信息。在 Windows Vista 和 Windows Server 2008 下,这些 API 将返回 6 作为主要版本。如果程序被硬编码以查找 XP 版本,即主要版本 5,则在 Windows Vista 和 Windows Server 2008 下它将失败。阅读此链接后我感到困惑。任何建议。
  • 多年前,XP 是一个新的操作系统,引入了一些新的机制和新的 API。此时,“非常旧”的窗口的主版本号为 4 或更少,而“新”窗口(即 XP 类)的主版本号为 5。开发人员过去常常手动检查 GetVersion检查应用程序是在“旧”系统还是“新”系统上运行,只是不要尝试在“旧”系统上使用新 API。一些开发人员倾向于忽略版本号的演变。他们将支票写为if version == 5 而不是if version >= 5
  • 因此,MSDN 上的注释提醒,在比 XP 更新的操作系统上,每个写为 if version == 5 的版本检查都会失败。例如,Vista 的专业是 6。因此,检查 if version == 5 在 Vista 上将失败,忽略 6 比 5 新,从而忽略 WinXP 中引入的这些新 API 集在 Vista 中存在的事实。如果你在 Vista 上运行这样的程序,这个程序会认为它正在运行,即在 Win98 上
  • 感谢 quetzalcoatl,在我的程序中也有针对 windows 版本的检查。我正在通过 OSVERSIONINFO 结构使用 GetVersionEx() 获取版本,并检查版本 osversioninfo.dwMajorVersion >= 6 for windows 7。这可能是问题,这将引起 windows 的注意以检查 windows 的这个 exe 兼容性问题?

标签: windows compatibility


【解决方案1】:

运行应用程序时窗口显示的“兼容性选项”与GetVersionEx 无关。 我认为当 Manifest 缺失和/或当它指示与您的计算机安装的 Windows 系统不同时会弹出此对话框。

如果您的应用程序的用户看到该兼容性弹出窗口,请确保您的清单是正确的。这篇文章可能是一个好的开始:

http://msdn.microsoft.com/en-us/library/bb757005.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/bb756937.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/dd371711.aspx

【讨论】:

    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多