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

后端 未结 6 1043
陌清茗
陌清茗 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 15:02

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

    //DLL Imports
    using System.Runtime.InteropServices;            
    
                /// 
                /// The function determines whether the current operating system is a 
                /// 64-bit operating system.
                /// 
                /// 
                /// The function returns true if the operating system is 64-bit; 
                /// otherwise, it returns false.
                /// 
                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);
                    }
                }
    
    
    
        /// 
        /// The function determins whether a method exists in the export 
        /// table of a certain module.
        /// 
        /// The name of the module
        /// The name of the method
        /// 
        /// The function returns true if the method specified by methodName 
        /// exists in the export table of the module specified by moduleName.
        /// 
        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);
    

提交回复
热议问题