在C#中,如何通过编程知道操作系统是x64还是x86

在C#中,如何通过编程知道操作系统是x64还是x86,c#,.net,64-bit,C#,.net,64 Bit,在C#中,如何通过编程知道操作系统是x64还是x86 我在互联网上找到了这个API方法,但它不起作用 [DllImport("kernel32.dll")] public static extern bool IsWow64Process(System.IntPtr hProcess, out bool lpSystemInfo); public static bool IsWow64Process1 { get { bool retVal = false;

在C#中,如何通过编程知道操作系统是x64还是x86

我在互联网上找到了这个API方法,但它不起作用

[DllImport("kernel32.dll")]
public static extern bool IsWow64Process(System.IntPtr hProcess, out bool lpSystemInfo);

public static bool IsWow64Process1
{
   get
   {
       bool retVal = false;
       IsWow64Process(System.Diagnostics.Process.GetCurrentProcess().Handle, out retVal);
       return retVal;
   }
}
提前感谢。

看看这个:


我认为您正在寻找System.Environment.OSVersion

boolx86=IntPtr.Size==4

如果您基于任何CPU构建,并且运行在64位系统上,那么它将运行在64位版本的框架上。在32位系统上,它将在32位版本的框架上运行。只需检查
IntPtr.Size
属性,就可以利用它的优势。如果
大小
=4,则运行的是32位,
大小
=8,则运行的是64位。

以下是源代码,请不要投我的赞成票:)


在.NET4.0中,您可以使用新属性

这就是它的弹劾方式

public static bool Is64BitOperatingSystem
{
    [SecuritySafeCritical]
    get
    {
        bool flag;
        return ((Win32Native.DoesWin32MethodExist("kernel32.dll", "IsWow64Process") && Win32Native.IsWow64Process(Win32Native.GetCurrentProcess(), out flag)) && flag);
    }
}

使用reflector或类似工具查看其工作原理。

它返回的错误是什么?您可以发布ISWOW64ProcessAPI的返回值吗?另外,您的.NET DLL是否编译为AnyCPU?另外,请尝试搜索-bing会返回结果。@obelix:没有错误,但我的操作系统版本是64,它返回FalseHoram,如果您编译为AnyCPU,那么您的进程可能是本机64位进程,而不是WoW64。在64位操作系统上,该函数很可能是错误的。您只检查了是否正在模拟您的进程-它可能是本机进程。该进程的可能副本似乎无法回答它是32位还是64位的问题。Environment.Is64BitProcess属性仅在.Net 4.0中受支持,我使用的是3.5,这可能不正确-这将显示您是在32位上运行,还是在64位上的WOW64下运行。它不会给你实际的平台,但会告诉你当前的运行时环境。是的,他们搞砸了。这在.NET4.5中变得更复杂了。默认值现在是“任意CPU(32位首选)”。看见
public static bool Is64BitOperatingSystem
{
    [SecuritySafeCritical]
    get
    {
        bool flag;
        return ((Win32Native.DoesWin32MethodExist("kernel32.dll", "IsWow64Process") && Win32Native.IsWow64Process(Win32Native.GetCurrentProcess(), out flag)) && flag);
    }
}