2009-09-10 41 views

回答

1

您可以使用PInvoke

这是一个代码示例发现here

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; 
    } 
} 
+0

这是一个很好的解决方案,如果你的.NET应用程序与强制x86上运行编译标志等原因,但你仍然需要确定主机系统64位。 – Mike 2009-12-17 13:54:27

2

最简单的方法是做到这一点:

Int32 addressWidth = IntPtr.Size * 8; 

因为IntPtr.Size是4个字节在32位体系结构和在64位架构的8个字节。