سؤال

وطلبي. NET (أي-CPU) يحتاج إلى قراءة قيمة التسجيل التي تم إنشاؤها باستخدام برنامج 32 بت. على ويندوز 64 بت هذا يذهب تحت مفتاح Wow6432Node في التسجيل. لقد قرأت أنه لا ينبغي عليك بجد رمز إلى Wow6432Node، فما هي الطريقة الصحيحة للوصول إليه مع صافي؟

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

المحلول

في حالة ما إذا كنت تحتاج صراحة إلى قراءة قيمة كتبه برنامج 32 بت في برنامج 64 بت، انه موافق على رمز القرص الثابت عليه. ببساطة لأن هناك حقا أي خيار آخر.

وأود أن مجردة ذلك بالطبع إلى وظيفة مساعد. على سبيل المثال

public RegistryKey GetSoftwareRoot() {
  var path = 8 == IntPtr.Size 
    ? @"Software\Wow6432Node"
    : @"Software";
  return Registry.CurrentUser.OpenSubKey(path);
}

نصائح أخرى

إذا يمكنك تغيير الهدف صافي الإصدار إلى V4، ثم يمكنك استخدام وظيفة OpenBaseKey جديدة مثل

RegistryKey registryKey;
if (Environment.Is64BitOperatingSystem == true)
{
    registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
}
else
{
    registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32);
}

والطريقة الصحيحة سيكون لاستدعاء API التسجيل الأصلي واجتياز العلم KEY_WOW64_32KEY إلى RegOpenKeyEx / RegCreateKeyEx

وتوسيع الجواب اندرس، وهناك خير مثال على التفاف الناتجة التعامل في كائن RegistryKey .NET على شاهار Prish في بلوق - تأكد من قراءة تعليقات على الرغم جدا

لاحظ أن استخدام صريح من المجمع pinvoke.net من RegOpenKeyEx محفوف القضايا.

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