2010-06-24 5 views
20

हम आपके द्वारा बनाई जाने वाली कई सेवाओं को स्थापित करने के लिए WIX का उपयोग कर रहे हैं। मैं वर्तमान में स्थापित सेवाओं को डंप करने के लिए एक त्वरित उपयोगिता लिख ​​रहा हूं।रजिस्ट्री GetSubKeyNames() Regedit की तुलना में अलग-अलग कुंजी सूचीबद्ध करता है?

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 

DisplayName की तलाश: मैं बस की उपकुँजियाँ से अधिक पुनरावृति। समस्या यह है कि, मेरी दस सेवाओं में से केवल दो ही सूची में दिखाई देती हैं।

हालांकि, जब मैं रेजीडिट में उपकुंजियों को देखता हूं, तो वे वहां हैं। साथ ही, वे स्थापित प्रोग्राम में हैं (और मैं उन्हें Win32_Product से SELECT * में भी ढूंढ सकता हूं)।

मैंने एमएसडीएन दस्तावेज़ों को देखा, यह पता लगाने की कोशिश कर रहा है कि रजिस्ट्री का कुछ विशेष दृश्य है जो मुझे याद नहीं है। शायद यह एक विशेषाधिकार मुद्दा है? लेकिन मैं व्यवस्थापक के रूप में उपकरण चला रहा हूँ। क्या कुछ छिद्र बढ़ते मुद्दे हैं?

String registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; 
using(Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registryKey)) 
{ 
    foreach(String subkeyName in key.GetSubKeyNames()) 
    Console.WriteLine(key.OpenSubKey(subkeyName).GetValue("DisplayName")); 
} 

इस पर कोई विचार:

बस कोड के साथ स्पष्ट होना, यहाँ (this answer से) परीक्षण ऐप कोड है?

+0

आप वास्तव में क्या करने की कोशिश कर रहे हैं? साथ ही, आपको इसे "विक्स" के रूप में टैग करना चाहिए। – dvallejo

+1

इसके अलावा, कृपया शीर्षक में टैग ("सी #") दोहराएं। मुझे यकीन है कि आपको नहीं लगता कि 'GetSubKeyNames' एक सी # विधि है, लेकिन शीर्षक उस तरह से पढ़ता है। –

उत्तर

25

समस्या 32/64 बिट समस्या है। ऐसा लगता है कि प्रतिष्ठानों के कुछ

HKEY_LOCAL_MACHINE\Software\Wow6432Node\... 

के तहत हुआ जब मैं उन दोनों की गणना, मैं अपने प्रतिष्ठानों के सभी मिलता है।

स्पष्ट रूप से मैं RegistryKey.OpenBaseKey() का उपयोग RegistryView.Registry64/32 के साथ Wow6432Node के बजाय भी कर सकता हूं।

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