【发布时间】:2021-05-06 08:23:28
【问题描述】:
我正在编写一组理论上可以在x86、AMD64、ARM 或ARM64 PowerShell 进程中运行的 PowerShell 函数。脚本函数将启动指定的可执行文件,但首先我想检查当前 Windows 安装是否真正支持可执行文件的“机器类型”。
例子:
- Windows Server 2019 可以删除其 WOW64 兼容层 - 我想在尝试启动 x86 EXE 之前检测 WOW64 不可用
- 在撰写本文时,基于 ARM64 的 Windows 10 支持 x86、ARM 和 ARM64 可执行文件,但据报道,微软正在通过 WOW 子系统的扩展来支持 AMD64 (x64) 应用程序。因此,在未来的某些 Windows 版本中,基于 ARM64 的 Windows 10 将支持 AMD64 应用程序。
有没有办法确定本机操作系统或其 WOW 子系统是否可以运行给定的可执行文件,而不是硬编码一堆检查?
忽略 PowerShell 语言的细节并使用伪代码,理想的函数应该是这样的:
IsProcessorArchitectureAvailable(strProcessorArchitecture)
- strProcessorArchitecture 将是“x86”、“AMD64”、“ARM”或“ARM64”
- 如果使用指定处理器架构的应用程序可以运行,该函数将返回 True,否则返回 False。
有没有办法做到这一点?
【问题讨论】:
-
如何将
Get-CimInstance与CIM_OperatingSystem和CIM_Processor类一起使用? -
没错。 Win32_Processor 或 CIM_Processor 或许能帮上忙,(powershell.one/wmi/root/cimv2/win32_processor)
-
@dan Win32_Processor 返回有关系统处理器的一大堆信息。我无法找到有关操作系统执行针对任何给定架构的代码的能力的任何信息。你心目中的属性是什么?
-
不确定为什么需要这样做?如果可执行文件启动失败,则会报错如216 (ERROR_EXE_MACHINE_TYPE_MISMATCH)。
-
在我链接的页面上,在标记为架构的部分中,它解释了如何使用一些代码检索系统是否为 x86、MIPS、Alpha、PowerPC、ia64、x64。主要思想是从 Win32_Processor 中检索一个表示其中一种类型的整数值。代码就是
Get-CimInstance -ClassName Win32_Processor | Select-Object -ExpandProperty Architecture。该页面上的代码中有一个查找表,您可以使用它来将代码翻译为术语。
标签: windows powershell arm compatibility