كيفية فتح مفتاح تسجيل WOW64 من تطبيق. NET 64 بت
سؤال
وطلبي. 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 محفوف القضايا.