كيف يمكنني معرفة ما إذا كان تطبيقي يعمل كتطبيق 32 بت أو 64 بت؟

StackOverflow https://stackoverflow.com/questions/266082

  •  06-07-2019
  •  | 
  •  

سؤال

كيف يمكنني معرفة ما إذا كان طلبي (الذي تم تجميعه في Visual Studio 2008 كـ أي وحدة المعالجة المركزية) يعمل كتطبيق 32 بت أو 64 بت؟

هل كانت مفيدة؟

المحلول

if (IntPtr.Size == 8) 
{
    // 64 bit machine
} 
else if (IntPtr.Size == 4) 
{
    // 32 bit machine
}

نصائح أخرى

إذا كنت تستخدم . NET 4.0، انها أونيلينير للتيار العملية:

Environment.Is64BitProcess

والمرجعي: <م> Environment.Is64BitProcess الملكية (MSDN)

ولقد وجدت هذا الرمز من مارتن بوفن أن لا حيلة:

public static bool Is64BitMode() {
    return System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == 8;
}

يمكن لنموذج التعليمات البرمجية هذا من Microsoft All-In-One Code Framework أن يجيب على سؤالك:

الكشف عن العملية التي تقوم بتشغيل النظام الأساسي في C# (CSPlatformDetector)

توضح نموذج رمز CSPlatFormDetector المهام التالية المتعلقة بالكشف عن النظام الأساسي:

  1. كشف اسم نظام التشغيل الحالي. (على سبيل المثال"مايكروسوفت ويندوز 7 إنتربرايز")
  2. اكتشاف إصدار نظام التشغيل الحالي. (على سبيل المثال"مايكروسوفت ويندوز NT 6.1.7600.0")
  3. تحديد ما إذا كان نظام التشغيل الحالي هو نظام تشغيل 64 بت.
  4. تحديد ما إذا كانت العملية الحالية هي عملية 64 بت.
  5. تحديد ما إذا كانت العملية التعسفية التي يتم تشغيلها على النظام هي 64 بت.

إذا كنت ترغب فقط في تحديد ما إذا كانت عملية التشغيل حاليًا عبارة عن عملية 64 بت ، فيمكنك استخدام البيئة.Is64BitProcess خاصية جديدة في .NET Framework 4.

وإذا كنت ترغب في اكتشاف ما إذا كان هناك تطبيق تعسفي يعمل على النظام هي عملية 64 بت ، تحتاج إلى تحديد بت نظام التشغيل ، وإذا كان 64 بت ، دعا IsWow64Process() باستخدام مقبض العملية المستهدفة:

static bool Is64BitProcess(IntPtr hProcess)
{
    bool flag = false;

    if (Environment.Is64BitOperatingSystem)
    {
        // On 64-bit OS, if a process is not running under Wow64 mode, 
        // the process must be a 64-bit process.
        flag = !(NativeMethods.IsWow64Process(hProcess, out flag) && flag);
    }

    return flag;
}

في صافي ستاندرد يمكنك استخدام System.Runtime.InteropServices.RuntimeInformation.OSArchitecture

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top