Using C#, how to get whether my machine is 64bit or 32bit?

后端 未结 6 1028
陌清茗
陌清茗 2021-02-19 14:23

Using C#, I would like to create a method that retunrs whether my machine is 64 or 32-bit.

Is there anybody who knows how to do that?

相关标签:
6条回答
  • 2021-02-19 14:56

    Here it is:

    How to detect Windows 64-bit platform with .NET?

    Quote:

    bool is64BitProcess = (IntPtr.Size == 8);
    bool is64BitOperatingSystem = is64BitProcess || InternalCheckIsWow64();
    
    [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool IsWow64Process(
        [In] IntPtr hProcess,
        [Out] out bool wow64Process
    );
    
    public static bool InternalCheckIsWow64()
    {
        if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) ||
            Environment.OSVersion.Version.Major >= 6)
        {
            using (Process p = Process.GetCurrentProcess())
            {
                bool retVal;
                if (!IsWow64Process(p.Handle, out retVal))
                {
                    return false;
                }
                return retVal;
            }
        }
        else
        {
            return false;
        }
    }
    
    0 讨论(0)
  • 2021-02-19 15:02
    System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")
    

    see this question.

    0 讨论(0)
  • 2021-02-19 15:02

    I have this coded for one of my projects (C# VS 2005).

    //DLL Imports
    using System.Runtime.InteropServices;            
    
                /// <summary>
                /// The function determines whether the current operating system is a 
                /// 64-bit operating system.
                /// </summary>
                /// <returns>
                /// The function returns true if the operating system is 64-bit; 
                /// otherwise, it returns false.
                /// </returns>
                public static bool Is64BitOperatingSystem()
                {
                    if (IntPtr.Size == 8)  // 64-bit programs run only on Win64
                    {
                        return true;
                    }
                    else  // 32-bit programs run on both 32-bit and 64-bit Windows
                    {
                        // Detect whether the current process is a 32-bit process 
                        // running on a 64-bit system.
                        bool flag;
                        return ((DoesWin32MethodExist("kernel32.dll", "IsWow64Process") &&
                            IsWow64Process(GetCurrentProcess(), out flag)) && flag);
                    }
                }
    
    
    
        /// <summary>
        /// The function determins whether a method exists in the export 
        /// table of a certain module.
        /// </summary>
        /// <param name="moduleName">The name of the module</param>
        /// <param name="methodName">The name of the method</param>
        /// <returns>
        /// The function returns true if the method specified by methodName 
        /// exists in the export table of the module specified by moduleName.
        /// </returns>
        static bool DoesWin32MethodExist(string moduleName, string methodName)
        {
            IntPtr moduleHandle = GetModuleHandle(moduleName);
            if (moduleHandle == IntPtr.Zero)
            {
                return false;
            }
            return (GetProcAddress(moduleHandle, methodName) != IntPtr.Zero);
        }
    
        [DllImport("kernel32.dll")]
        static extern IntPtr GetCurrentProcess();
    
        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        static extern IntPtr GetModuleHandle(string moduleName);
    
        [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
        static extern IntPtr GetProcAddress(IntPtr hModule,
            [MarshalAs(UnmanagedType.LPStr)]string procName);
    
        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool IsWow64Process(IntPtr hProcess, out bool wow64Process);
    
    0 讨论(0)
  • 2021-02-19 15:04

    System.Environment.Is64BitOperatingSystem

    0 讨论(0)
  • 2021-02-19 15:08
        public static string t2or64()
            {
                string t2s4;
                bool os = System.Environment.Is64BitOperatingSystem;
                int x = 0;
                if (os == true)
                {
                    x = 64;
                }
                else
                {
                    x = 32;
                }
    
                t2s4 = Convert.ToString(x);
                return t2s4;
            }
    
    0 讨论(0)
  • 2021-02-19 15:17

    You can check using IntPtr size. IntPtr size is 4 for 32 bit OS and 8 for 64 bit OS

    /// <summary>Is64s the bit operating system.</summary>
    /// <returns></returns>
    if (IntPtr.Size == 8)
        // 64Bit
    else
        // 32bit
    

    Type: System.Int32

    The size of a pointer or handle in this process, measured in bytes. The value of this property is 4 in a 32-bit process, and 8 in a 64-bit process. You can define the process type by setting the /platform switch when you compile your code with the C# and Visual Basic compilers.

    0 讨论(0)
提交回复
热议问题