سؤال

لديّ جهاز تثبيت 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 في الكود الخاص بك.

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