【问题标题】:GetVersionEx function for Windows 8.1 and upper (fasm)适用于 Windows 8.1 及更高版本 (fasm) 的 GetVersionEx 函数
【发布时间】:2015-12-21 13:48:31
【问题描述】:

我正在用 fasm 编写应用程序,但在确定 Windows 8.1 及更高版本时遇到问题。 GetVersionExVersion Helper 函数给了我 Windows 8。正如 MSDN 所说,我必须通过在 Visual Studio 中更改清单文件来定位我的应用程序,但我没有使用 VS,所以我该怎么办?

【问题讨论】:

  • Understanding Manifest Generation for C/C++ Programs 开始。使用 /MANIFESTINPUT (Specify Manifest Input) 链接器开关嵌入清单。如果您使用 FASM 链接目标代码,则必须使用 resdata manifest 宏指令指示它嵌入资源。
  • MSDN 并没有说你必须在 VS 中这样做。
  • Windows 8.1 是 GetVersionEx() 的行为发生变化的版本。您必须显示您的可执行文件,并在该清单中指定与特定操作系统版本的兼容性,以便GetVersionEx() 正确报告这些版本号。这种行为变化在 MSDN 上有详细记录。

标签: winapi fasm


【解决方案1】:

任何允许您将资源链接到已编译的可执行文件的编程环境都可用于创建清单资源。您所要做的就是为您的应用程序编写一个合适的.manifest 文件,其中包含所需的 XML 值,然后将该文件的内容直接链接到应用程序的资源中,确保资源类型为 24,资源 ID 为 1、2 ,或 3(有关何时使用哪个 ID 的详细信息,请参阅this page)。您不需要为此使用 VisualStudio。

如果由于某种原因,您无法将清单直接链接到应用程序的资源中,您也可以将 XML 保存到名为 <myappname>.exe.manifest 的文件中(其中 <myappname> 是您的 EXE 文件的实际名称)并将其放入在与您的应用程序相同的文件夹中。这不是首选的表现方式,但确实有效。

话虽如此,您可以使用其他 API 代替基于 GetVersion/Ex()VerifyVersionInfo() 的帮助程序来获得正确的操作系统版本,而无需处理任何表现形式。即,可以使用RtlGetVersion()NetServerGetInfo()NetWkstaGetInfo() 代替(并且所有这些都已在 Windows 8.1 和 10 中进行了测试)。

【讨论】:

    【解决方案2】:

    清单文件是作为 Win32 资源嵌入的 XML 文件。它也可以是名称为your.exe.manifest 的外部文件。在互联网上搜索示例以获取示例内容。

    【讨论】:

      猜你喜欢
      • 2010-11-12
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多