هل هذه طريقة جيدة لتحديد بنية نظام التشغيل؟

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

  •  08-06-2019
  •  | 
  •  

سؤال

نظرًا لأن فئة WMI Win32_OperatingSystem تتضمن فقط OSArchitecture في نظام التشغيل Windows Vista، فقد كتبت بسرعة طريقة باستخدام السجل لمحاولة تحديد ما إذا كان النظام الحالي هو نظام 32 أو 64 بت أم لا.

private Boolean is64BitOperatingSystem()
{
    RegistryKey localEnvironment = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment");
    String processorArchitecture = (String) localEnvironment.GetValue("PROCESSOR_ARCHITECTURE");

    if (processorArchitecture.Equals("x86")) {
        return false;
    }
    else {
        return true;
    }
}

لقد نجح الأمر جيدًا بالنسبة لنا حتى الآن، لكنني لست متأكدًا من مدى رغبتي في البحث في السجل.هل هذه ممارسة قياسية جدًا أم أن هناك طريقة أفضل؟

يحرر:واو، يبدو هذا الرمز أجمل كثيرًا في المعاينة.سأفكر في الارتباط بسلة لصق أو شيء من هذا القبيل في المرة القادمة.

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

المحلول

ألق نظرة على حل Raymond Chens:

كيفية اكتشاف ما إذا كنت تعمل على نظام التشغيل Windows 64 بت برمجياً

وإليك PINVOKE لـ .NET:

عملية IsWow64 (kernel32)

تحديث: سأواجه مشكلة في التحقق من "x86".من يستطيع أن يقول ما هو معالج Intel أو AMD التالي 32 بت الذي يمكن تصنيفه على أنه.الاحتمال منخفض ولكنه خطر.يجب أن تطلب من نظام التشغيل تحديد ذلك عبر واجهات برمجة التطبيقات الصحيحة، وليس عن طريق الاستعلام عما يمكن أن يكون قيمة محددة لإصدار نظام التشغيل/النظام الأساسي والتي قد تعتبر غير شفافة للعالم الخارجي.اطرح على نفسك الأسئلة، 1 - هل تم توثيق إدخال التسجيل المعني بشكل صحيح بواسطة MS، 2 - إذا كان الأمر كذلك، فهم يقدمون قائمة محددة بالقيم المحتملة التي تضمن لك كمطور اتخاذ قرار مستنير بين ما إذا كنت تقوم بتشغيل أم لا 32 بت أو 64 بت.إذا كانت الإجابة لا، فاتصل بواجهة برمجة التطبيقات (API)، نعم إنها طويلة ولكنها موثقة ونهائية.

نصائح أخرى

أسهل طريقة لاختبار الإصدار 64 بت ضمن .NET هي التحقق من قيمة IntPtr.Size.

أعتقد أن قيمة IntPtr.Size هي 4 لتطبيق 32 بت يعمل تحت WOW، أليس كذلك؟

يحرر:@يحرر:نعم.:)

أسهل طريقة لاختبار الإصدار 64 بت ضمن .NET هي التحقق من قيمة IntPtr.Size.

يحرر:دوه!سيخبرك هذا ما إذا كانت العملية الحالية هي 64 بت أم لا، وليس نظام التشغيل ككل.آسف!

يعد البحث في السجل أمرًا صالحًا تمامًا، طالما يمكنك التأكد من أن مستخدم التطبيق سيتمكن دائمًا من الوصول إلى ما تحتاجه.

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