قم بإنشاء مفتاح تسجيل 64 بت (غير Wow64) من تطبيق 32 بت
-
25-09-2019 - |
سؤال
لديّ جهاز تثبيت Visual Studio يقوم بإنشاء بعض مفاتيح التسجيل:
HKEY_LOCAL_MACHINE\SOFTWARE\MyApp
لكن مفاتيح التسجيل التي تنشئها تظهر تلقائيًا تحت WOW6432NODE:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyApp
كيف أتجاهل WOW6432NODE عند إنشاء مفاتيح التسجيل في رمز C# الذي يتم تنفيذه بواسطة MSI؟
المحلول
فقط FYI ، .NET 4.0 يدعم هذا أصليًا. مثال:
RegistryBase = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
يمكنك بعد ذلك استخدام ذلك registrybase متغير للوصول إلى أي شيء في عرض 64 بت من HKLM. على العكس Registry32 سيسمح للتطبيق 64 بت الوصول إلى عرض 32 بت للسجل.
نصائح أخرى
ألق نظرة على http://www.pinvoke.net/default.aspx/advapi32/regopenkeyex.html. ستحتاج إلى استخدام إعادة توجيه التسجيل والتمرير بالقيمة المناسبة لقناع الوصول. لسوء الحظ ستحتاج إلى بينفوك.
نظرًا لوجود القليل جدًا من الوثائق حول OpenBaseKey
, ، سأتوسع في إجابة Shifuimam وأقدم حلًا لـ OP:
Private Sub Foo()
Dim myAppIs64Bit = Environment.Is64BitProcess
Dim baseKey As RegistryKey
If (myAppIs64Bit) Then
baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
Else
baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)
End If
Dim myAppKey As RegistryKey = baseKey.OpenSubKey("SOFTWARE\MyApp")
End Sub
إذا كان التطبيق 32 بت ، myAppKey
نقاط ل HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyApp
. إذا كان 64 بت ، فإنه يشير إلى HKEY_LOCAL_MACHINE\SOFTWARE\MyApp
.
ميزة OpenBaseKey
هو أنه يلغي الحاجة إلى الإشارة Wow6432
في الكود الخاص بك.