微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有一种编程方式来确定支持哪些应用处理器架构?

如何解决是否有一种编程方式来确定支持哪些应用处理器架构?

我正在编写一组 PowerShell 函数,理论上可以在 x86AMD64ARMARM64 PowerShell 进程中运行。脚本函数将启动指定的可执行文件,但首先我想检查当前 Windows 安装是否实际支持该可执行文件的“机器类型”。

示例:

  • Windows Server 2019 可以删除其 WOW64 兼容层 - 我想在尝试启动 x86 EXE 之前检测 WOW64 不可用
  • 在撰写本文时,基于 ARM64 的 Windows 10 支持 x86、ARM 和 ARM64 可执行文件,但据报道,Microsoft 正在通过 WOW 子系统的扩展来支持 AMD64 (x64) 应用程序。因此,在未来的某些 Windows 版本中,基于 ARM64 的 Windows 10 将支持 AMD64 应用程序。

有没有办法确定原生操作系统或其 WOW 子系统是否可以运行给定的可执行文件,而不是硬编码一堆检查?

忽略 PowerShell 语言的细节并使用伪代码,理想的函数应该是这样的:


IsProcessorArchitectureAvailable(strProcessorArchitecture)

  • strProcessorArchitecture 将是“x86”、“AMD64”、“ARM”或“ARM64”
  • 如果使用指定处理器架构的应用程序可以运行,该函数将返回 True,否则返回 False。

有没有办法做到这一点?

解决方法

IsWow64GuestMachineSupported API 可用于确定 WOW64 是否已关闭:

需要确定 WOW64 是否关闭的应用。例如, 许多应用程序假设 x86-64 系统始终可以执行 x86-32 代码 时代,无处不在。请注意,WinPE 上不存在此功能或 Xbox,它是服务器中的可选组件。

使用此 API,您还可以检查 ARM 架构,请参阅 Image File Machine Constants

还有 IsWow64Process2 返回主机系统的本机架构。

要调用这些 API,您需要在 PowerShell 中使用 C# 进行 P/Invoke。

可以找到完整的 C# 示例 here 和 PowerShell 示例 here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。