PDA

View Full Version : سوال: تشخیص ۳۲ یا ۶۴ بیتی بودن ویندوز



mjzaret
پنج شنبه 26 شهریور 1394, 00:11 صبح
سلام به دوستان

چطور میتونم در سی شارپ برنامه‌ای بنویسم که بهم نوع سیستم عامل و پلتفرم رو نشون بده.

منظورم 64 بیتی بودن یا 32 بیتی سیستم عامل هست.

شاد باشید :لبخندساده:

drsina
پنج شنبه 26 شهریور 1394, 00:26 صبح
من این کارا قبلن کردم تقریبا 80 % کد هایی توو stackoverflow هستند ، جواب اشتباه میدن . چون پروسسی که 32 بیتی باشه سیستم عامل رو X86 نشون میده حتی اگه 64 بیت باشه .
ولی این کدو مجبور شدم خودم بنویسم ودرست کار میده :

static bool is64BitProcess = (IntPtr.Size == 8); static 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;
}
}

جواب تابع بالا به صورت :
MessageBox.Show(is64BitOperatingSystem.ToString()) ;


در این متغییر هست که اگر true باشه یعنی 64 بیته واگه false یعنی 32 بیت

موفق باشید.

omid nasri
پنج شنبه 26 شهریور 1394, 01:12 صبح
با اینکه سیستم بنده 64 بیت می باشد اما نتیجه خروجی مقدار False، کد مجدد ویرایش شود لطفا.
در سیستم عامل ویندوز 10 نسخه 64 بیت تست شد.

mjzaret
پنج شنبه 26 شهریور 1394, 02:33 صبح
از بابت راهنماییتون تشکر میکنم.

من تست کردم.

ویندوز 7 هم 64 بیتی و هم 32 بیتی به خوبی جواب داد.

در ویندوز 8.1 نوع 64 بیتی هم مشکلی نداشت.

در ویندوز xp هم تست گرفتم و جواب به درستی صورت گرفت.

شاد باشید :لبخندساده:

drsina
پنج شنبه 26 شهریور 1394, 12:08 عصر
با اینکه سیستم بنده 64 بیت می باشد اما نتیجه خروجی مقدار False، کد مجدد ویرایش شود لطفا.
همون جور که گفتن باید درست باشه .
شما مطمئنید متغیر is64BitOperatingSystem رو نشون دادید ؟! فقط همین متغیر درسته بقیش چیزه دیگه ای مثلا is64BitProcess در برنامه 32 بیت کار نمیده.

mjzaret
جمعه 27 شهریور 1394, 23:01 عصر
من به صورت کامل تست کردم.

در تمامی ویندوزها به غیر از ویندوز 10 تست نمودم و جواب کاملاً درست بود.

از اینکه دوست عزیز این کد رو گذاشتن تشکر می‌کنم.

شاد باشید :لبخندساده: