Как определить, что мы работаем под ARM64-версией Windows 10 в .NET? - PullRequest
0 голосов
/ 31 января 2019

Я создал консольное приложение C # .NET, которое может работать в Windows 10 x86, x64 и ARM64 (через уровень эмулятора).

Я хотел бы знать, как определить, что приложение работает на этих платформах,Я знаю, как обнаружить x86 и x64, , но как определить, что приложение работает внутри ARM64 ?

Это снимок Visual Studio, работающего в моей системе ARM64.Вы можете видеть, что это обнаружено как X86

enter image description here

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

ОК, этот код работает:

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
    );
}

(через Вызов IsWowProcess2 из C # .NET (P / Invoke) )

0 голосов
/ 31 января 2019

Вы сможете определить архитектуру процессора, используя

System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture

, который затем вернет Architecure enum: https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.architecture?view=netstandard-2.0

...