【发布时间】: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