如何在.NET中检测我们是否在ARM64版本的Windows 10下运行?

10
我创建了一个C# .NET控制台应用程序,可以在Windows 10 x86、x64和ARM64(通过模拟器层)上运行。
我想知道如何检测应用程序是否在这些平台上运行。我知道如何检测x86和x64,但如何检测应用程序是否在ARM64内部运行?
这是Visual Studio运行在我的ARM64系统中的快照。您可以看到它被检测为X86。

enter image description here


请查看此链接- https://dev59.com/DnRA5IYBdhLWcg3w9izq - Souvik Ghosh
这是一个 .NET Core/.NET Framework 应用程序吗?你如何发布它? - cube45
这是一个标准的控制台应用程序(.NET Framework),我不会发布它。也许可以用二进制文件打包成 .zip 文件 :) - SuperJMN
2个回答

4

许多位于_System.Runtime.InteropServices_下的命名空间可以通过由@JamieRees共享的链接进行访问。您可以在其中找到有关开发领域的其他信息。 - Tunahan
1
我终于尝试了你的解决方案,但很困惑,因为即使在ARM64机器内部运行,System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture仍然返回X86。 - SuperJMN
请查看我在第一篇帖子中添加的截图。 - SuperJMN
@SuperJMN:代码在Windows仿真层上使用x86 dotnet运行时,这可能吗?我猜如果有一个枚举说“Arm64”,它一定被用在某个地方了... - cube45
现在这是正确的答案。@SuperJMN,你能否修改一下? - Sedat Kapanoglu

0

好的,这段代码可以正常运行:

public static class ArchitectureInfo
{
    public static bool IsArm64()
    {
        var handle = Process.GetCurrentProcess().Handle;
        IsWow64Process2(handle, out var processMachine, out var nativeMachine);

        return nativeMachine == 0xaa64;
    }

    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool IsWow64Process2(
        IntPtr process, 
        out ushort processMachine, 
        out ushort nativeMachine
    );
}

(通过 在C# .NET中调用IsWowProcess2 (P/Invoke))


2
你接受了这个答案,但是关于你在这里使用的其他问题的答案呢?此外,这里的代码是错误的,因为它没有在调用IsWow64Process2时检查错误。 - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接