是否有一种编程方式来确定支持哪些应用程序处理器架构?
Is there a programmatic way to determine which application processor architectures are supported?
我正在编写一组 PowerShell 函数,理论上可以 运行ing 在 x86
、AMD64
、ARM
或 ARM64
中PowerShell 进程。脚本函数将启动指定的可执行文件,但首先我想检查当前 Windows 安装是否实际支持可执行文件的“机器类型”。
示例:
- Windows Server 2019 可以删除其 WOW64 兼容层 - 我想在尝试启动 x86 EXE 之前检测到 WOW64 不可用
- Windows ARM64 上的 10 在撰写本文时支持 x86、ARM 和 ARM64 可执行文件,但据报道,微软正在通过扩展 WOW 子系统来支持 AMD64 (x64) 应用程序。因此,在 Windows 的某个未来版本中,ARM64 上的 Windows 10 将支持 AMD64 应用程序。
有没有办法确定本机 OS 或其 WOW 子系统是否可以 运行 给定的可执行文件,而不是对一堆检查进行硬编码?
忽略 PowerShell 语言的细节并使用伪代码,理想的函数应该是这样的:
IsProcessorArchitectureAvailable(strProcessorArchitecture)
- strProcessorArchitecture 将是“x86”、“AMD64”、“ARM”或“ARM64”
- 如果使用指定处理器架构的应用程序可以 运行,则该函数 return 为真,否则为假。
有办法吗?
IsWow64GuestMachineSupportedAPI可以判断WOW64是否关闭:
Apps that need to determine if WOW64 is turned off or not. For example,
many apps assume x86-64 systems can always execute x86-32 code at all
times, everywhere. Note that this ability does not exist on WinPE or
Xbox, and it is an optional component in Server.
使用此 API 您还可以检查 ARM 架构,请参阅 Image File Machine Constants。
还有 IsWow64Process2,returns 主机系统的本机架构。
要调用这些 API,您需要 P/Invoke 使用 PowerShell 中的 C#。
我正在编写一组 PowerShell 函数,理论上可以 运行ing 在 x86
、AMD64
、ARM
或 ARM64
中PowerShell 进程。脚本函数将启动指定的可执行文件,但首先我想检查当前 Windows 安装是否实际支持可执行文件的“机器类型”。
示例:
- Windows Server 2019 可以删除其 WOW64 兼容层 - 我想在尝试启动 x86 EXE 之前检测到 WOW64 不可用
- Windows ARM64 上的 10 在撰写本文时支持 x86、ARM 和 ARM64 可执行文件,但据报道,微软正在通过扩展 WOW 子系统来支持 AMD64 (x64) 应用程序。因此,在 Windows 的某个未来版本中,ARM64 上的 Windows 10 将支持 AMD64 应用程序。
有没有办法确定本机 OS 或其 WOW 子系统是否可以 运行 给定的可执行文件,而不是对一堆检查进行硬编码?
忽略 PowerShell 语言的细节并使用伪代码,理想的函数应该是这样的:
IsProcessorArchitectureAvailable(strProcessorArchitecture)
- strProcessorArchitecture 将是“x86”、“AMD64”、“ARM”或“ARM64”
- 如果使用指定处理器架构的应用程序可以 运行,则该函数 return 为真,否则为假。
有办法吗?
IsWow64GuestMachineSupportedAPI可以判断WOW64是否关闭:
Apps that need to determine if WOW64 is turned off or not. For example, many apps assume x86-64 systems can always execute x86-32 code at all times, everywhere. Note that this ability does not exist on WinPE or Xbox, and it is an optional component in Server.
使用此 API 您还可以检查 ARM 架构,请参阅 Image File Machine Constants。
还有 IsWow64Process2,returns 主机系统的本机架构。
要调用这些 API,您需要 P/Invoke 使用 PowerShell 中的 C#。