如何确定正在使用的是32位还是64位ASP.NET?

5

我有一个ASP.NET服务器,但我没有直接访问权限。如何编写一个.NET应用程序,以编程方式确定ASP.NET是运行在32位还是64位?

3个回答


3
最简单的方法是这样做:
Int32 addressWidth = IntPtr.Size * 8;

由于32位架构上IntPtr.Size为4字节,而64位架构上为8字节。


1

你可以使用PInvoke

这是在这里找到的代码示例。

private enum Platform
{
    X86,
    X64,
    Unknown
}

internal const ushort PROCESSOR_ARCHITECTURE_INTEL = 0;
internal const ushort PROCESSOR_ARCHITECTURE_IA64 = 6;
internal const ushort PROCESSOR_ARCHITECTURE_AMD64 = 9;
internal const ushort PROCESSOR_ARCHITECTURE_UNKNOWN = 0xFFFF;

[StructLayout(LayoutKind.Sequential)]
internal struct SYSTEM_INFO
{
    public ushort wProcessorArchitecture;
    public ushort wReserved;
    public uint dwPageSize;
    public IntPtr lpMinimumApplicationAddress;
    public IntPtr lpMaximumApplicationAddress;
    public UIntPtr dwActiveProcessorMask;
    public uint dwNumberOfProcessors;
    public uint dwProcessorType;
    public uint dwAllocationGranularity;
    public ushort wProcessorLevel;
    public ushort wProcessorRevision;
};

[DllImport("kernel32.dll")]
internal static extern void GetNativeSystemInfo(ref SYSTEM_INFO lpSystemInfo);        

private static Platform GetPlatform()
{
    SYSTEM_INFO sysInfo = new SYSTEM_INFO();
    GetNativeSystemInfo(ref sysInfo);

    switch (sysInfo.wProcessorArchitecture)
    {
        case PROCESSOR_ARCHITECTURE_AMD64:
            return Platform.X64;

        case PROCESSOR_ARCHITECTURE_INTEL:
            return Platform.X86;

        default:
            return Platform.Unknown;
    }
}

如果您的.NET应用程序由于其他原因而使用了强制x86编译标志,但仍需要确定主机系统是否为64位,则这是一个不错的解决方案。 - Mike

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