نمایش نتایج 1 تا 4 از 4

نام تاپیک: تشخيص سيستم عامل 32 بيتي يا 64 بيتي (os 32bit or 64bit )

  1. #1

    5 روش براي تشخيص سيستم عامل 32 بيتي يا 64 بيتي (os 32bit or 64bit )

    خوب اين هم 5 متد براي تشخيص 64 يا 32 بيتي بودن سيستم عامل که بر روي ويندوز هاي xp , 7 تست شده
    در ضمن خود برنامه را برايتان اپلود مي کنم انشاء الله مفيد واقع بشه
    لازم نيست که در برنامه خودتون از همه ي متدها استفاده کنيد فقط يک متد کافي است

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.Win32;
    using System.Runtime.InteropServices;
    using System.Diagnostics;




    namespace WindowsFormsApplication1
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    /// <summary>
    /// /// 1. Using environment variable
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button1_Click(object sender, EventArgs e)
    {
    string strProcArchi = Environment.GetEnvironmentVariable("PROCESSOR_ARCH ITECTURE");

    if (strProcArchi.IndexOf("64") > 0)
    {
    MessageBox.Show("Processor 64 bit");
    }
    else
    {
    MessageBox.Show("Processor 32 bit");
    }
    }

    /// <summary>
    /// 2. Using size of IntPtr (recommended)
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>

    private void button2_Click(object sender, EventArgs e)
    {

    if (System.IntPtr.Size == 8)
    {
    MessageBox.Show("Processor 64 bit");
    }
    else
    {
    MessageBox.Show("Processor 32 bit");
    }

    }

    /// <summary>
    /// 3. Reading registry
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button3_Click(object sender, EventArgs e)
    {

    RegistryKey rkIdentifier = Registry.LocalMachine.OpenSubKey("HARDWARE\\DESCRI PTION\\System\\CentralProcessor\\0");
    if (rkIdentifier.GetValue("Identifier").ToString().In dexOf("64") > 0)
    {
    MessageBox.Show("Processor 64 bit");
    }
    else
    {
    MessageBox.Show("Processor 32 bit");
    }

    }


    /// <summary>
    /// 4. Using GetSystemInfo API
    /// </summary>
    /// <param name="lpSystemInfo"></param>
    [DllImport("kernel32.dll")]
    public static extern void GetSystemInfo([MarshalAs(UnmanagedType.Struct)] ref SYSTEM_INFO lpSystemInfo);

    [StructLayout(LayoutKind.Sequential)]
    public struct SYSTEM_INFO
    {
    internal _PROCESSOR_INFO_UNION uProcessorInfo;
    public uint dwPageSize;
    public IntPtr lpMinimumApplicationAddress;
    public IntPtr lpMaximumApplicationAddress;
    public IntPtr dwActiveProcessorMask;
    public uint dwNumberOfProcessors;
    public uint dwProcessorType;
    public uint dwAllocationGranularity;
    public ushort dwProcessorLevel;
    public ushort dwProcessorRevision;
    }

    [StructLayout(LayoutKind.Explicit)]
    public struct _PROCESSOR_INFO_UNION
    {
    [FieldOffset(0)]
    internal uint dwOemId;
    [FieldOffset(0)]
    internal ushort wProcessorArchitecture;
    [FieldOffset(2)]
    internal ushort wReserved;
    }
    public enum eOperatingSystem
    {
    X64,
    x86,
    Itanium,
    Unknown
    }

    public eOperatingSystem DeterminateOperatingSystem()
    {
    eOperatingSystem result = eOperatingSystem.Unknown;
    SYSTEM_INFO l_System_Info = new SYSTEM_INFO();
    GetSystemInfo(ref l_System_Info);

    switch (l_System_Info.uProcessorInfo.wProcessorArchitectu re)
    {
    case 9: // PROCESSOR_ARCHITECTURE_AMD64
    result = eOperatingSystem.X64;
    break;
    case 6: // PROCESSOR_ARCHITECTURE_IA64
    result = eOperatingSystem.Itanium;
    break;
    case 0: // PROCESSOR_ARCHITECTURE_INTEL
    result = eOperatingSystem.x86;
    break;
    default: // PROCESSOR_ARCHITECTURE_UNKNOWN
    result = eOperatingSystem.Unknown;
    break;
    }
    return result;
    }


    private void button4_Click(object sender, EventArgs e)
    {
    MessageBox.Show(DeterminateOperatingSystem().ToStr ing());
    }


    /// <summary>
    /// 5. Using IsWow64Process API
    /// </summary>
    /// <param name="hProcess"></param>
    /// <param name="lpSystemInfo"></param>
    /// <returns></returns>

    [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool lpSystemInfo);

    private void button5_Click(object sender, EventArgs e)
    {
    bool bIsWow64;
    bool bSuccess = IsWow64Process(Process.GetCurrentProcess().Handle, out bIsWow64);
    if (!bSuccess)
    MessageBox.Show("Processor 32 bit");
    else
    {
    if (bIsWow64)
    {
    MessageBox.Show("Process 32 bit runs on processor 64 bit");
    }
    else
    {
    MessageBox.Show("Process 64 bit runs on processor 64 bit");
    }
    }

    }




    }
    }
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله hossein_1200 : دوشنبه 28 شهریور 1390 در 15:21 عصر

  2. #2
    کاربر دائمی آواتار f_pakzad
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    مازندران
    پست
    185

    نقل قول: تشخيص سيستم عامل 32 بيتي يا 64 بيتي (os 32bit or 64bit )

    میشه کدها را تو تگ بگذارید و توضیح کوچکی هم درموردش بدید؟

  3. #3
    کاربر دائمی آواتار joker
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    اصفهان
    سن
    42
    پست
    1,326

    نقل قول: تشخيص سيستم عامل 32 بيتي يا 64 بيتي (os 32bit or 64bit )

    از روش آخر IsWow64Process استفاده کنید از همه مطمئنتره

  4. #4

    نقل قول: تشخيص سيستم عامل 32 بيتي يا 64 بيتي (os 32bit or 64bit )

    نقل قول نوشته شده توسط f_pakzad مشاهده تاپیک
    میشه کدها را تو تگ بگذارید و توضیح کوچکی هم درموردش بدید؟
    ويرايش کردم يک نمونه برنامه هم نوشتم براتون اپلود کردم

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •