2012-12-05 11 views
54

मैं इस कुंजी के भीतर उप कुंजी के सभी प्रदर्शन नाम पाने के लिए कोशिश कर रहा हूँ में देख सकते हैं के लिए अशक्त रिटर्नOpenSubKey() एक रजिस्ट्री कुंजी है कि मैं regedit.exe

 RegistryKey newKey; 
    string val; 

    string KeyPath64Bit = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; 
    RegistryKey mainKey = Registry.LocalMachine.OpenSubKey(KeyPath64Bit); 

    string[] RegKeys64Bits = Registry.LocalMachine.OpenSubKey(KeyPath64Bit).GetSubKeyNames(); 

    foreach (string s in RegKeys64Bits) 
    { 
     newKey = mainKey.OpenSubKey(s); 
     val = newKey.GetValue("DisplayName", -1, RegistryValueOptions.None).ToString(); 
     if (val != "-1") 
      file64.WriteLine(val); 
    } 

कोड चलाने के बाद मैं कुंजियों में से एक नहीं मिल सकता है मैं की जरूरत है:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E} 

और इसमें डिस्प्ले नाम होना चाहिए: माइक्रोसॉफ्ट विजुअल सी ++ 2010 x64 पुनर्वितरण योग्य - 10.0.3031 9, लेकिन इसके बजाय GetSubKeyNames() विधि मुझे उप कुंजी देता है: जिसमें कोई डिस्प्ले नाम नहीं है।

मुझे सटीक उप कुंजी क्यों चाहिए ({DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}) और मैं इसे कैसे प्राप्त कर सकता हूं?

+0

यदि आप विज़ुअल स्टूडियो को व्यवस्थापक के रूप में चलाते हैं तो क्या आप ऐसा कर सकते हैं? – tsells

+0

@tsells ने कोशिश की और यह काम नहीं करता है। –

+0

क्या आप 64-बिट ओएस पर 32-बिट प्रक्रिया में चल रहे हैं? –

उत्तर

125

64-बिट ओएस पर 32-बिट एप्लिकेशन डिफ़ॉल्ट रूप से HKLM\Software\Wow6432Node नोड को देखेगा। कुंजी के 64-बिट संस्करण को पढ़ने के लिए, आपको RegistryView का उल्लेख करना होगा:

using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)) 
using (var key = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")) 
{ 
    // key now points to the 64-bit key 
} 

इस .NET 4.0 में जोड़ा गया है करने के लिए एपीआई; यदि आप अभी भी 3.5 का उपयोग कर रहे हैं, तो आपको 64-बिट कुंजियों तक पहुंचने के लिए पी/इनवॉक का उपयोग करना होगा: http://www.rhyous.com/2011/01/24/how-read-the-64-bit-registry-from-a-32-bit-application-or-vice-versa/

+0

धन्यवाद, यह काम करता है –

+0

यह काम कर रहा है। मेरा समय बचाने के लिए धन्यवाद। –

+0

धन्यवाद। मुझे एक ही समस्या के साथ एक ही समस्या थी। 3.5 मदद के लिए – ECC

संबंधित मुद्दे