से WOW64 रजिस्ट्री कुंजी को कैसे खोलें मेरे .NET अनुप्रयोग (किसी भी CPU) को 32-बिट प्रोग्राम द्वारा बनाए गए रजिस्ट्री मान को पढ़ने की आवश्यकता है। 64-बिट विंडोज़ पर यह रजिस्ट्री में Wow6432Node कुंजी के अंतर्गत चला जाता है। मैंने पढ़ा है कि आपको Wow6432Node पर हार्ड-कोड नहीं करना चाहिए, तो .NET के साथ इसका उपयोग करने का सही तरीका क्या है?64-बिट .NET अनुप्रयोग
उत्तर
उस स्थिति में जहां आपको 64 बिट प्रोग्राम में 32 बिट प्रोग्राम द्वारा लिखे गए मान को पढ़ने की आवश्यकता है, तो यह कठिन कोड है। बस क्योंकि वास्तव में कोई अन्य विकल्प नहीं है।
मैं निश्चित रूप से इसे एक सहायक समारोह में समझाऊंगा। उदाहरण
public RegistryKey GetSoftwareRoot() {
var path = 8 == IntPtr.Size
? @"Software\Wow6432Node"
: @"Software";
return Registry.CurrentUser.OpenSubKey(path);
}
के लिए सही तरीका देशी रजिस्ट्री API कॉल और RegOpenKeyEx/RegCreateKeyEx
यह ध्यान दिया जाना चाहिए कि यह समाधान केवल पिनकोकिंग या सी ++ कोड का उपयोग करते समय मान्य है। – Kyle
@ जेनॉक्स - यह निश्चित रूप से वैध समाधान है जब भी सी # जैसी भाषा का उपयोग करते हुए आप इसका उपयोग करने के लिए मूर्ख होंगे। –
को KEY_WOW64_32KEY
झंडा गुजर ऐन्डर्स के जवाब का विस्तार करने के लिए किया जाएगा, वहाँ एक good example of wrapping the resulting handle in a .NET RegistryKey object on Shahar Prish's blog है - भी हालांकि टिप्पणी पढ़ने के लिए सुनिश्चित हो।
ध्यान दें कि the pinvoke.net wrapper of RegOpenKeyEx का अनचाहे उपयोग मुद्दों से भरा हुआ है।
यह एक अच्छा समाधान है। – adzm
यदि आप लक्ष्य .Net संस्करण को 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);
}
यह समाधान मेरे विन 7 64 बिट + यूनिट परीक्षण के साथ बहुत काम करता है। धन्यवाद। – Jirapong
रजिस्ट्री को पढ़ने का यह तरीका है। WoW6432Node को सीधे पढ़ा नहीं जाना चाहिए क्योंकि माइक्रोसॉफ्ट इसे अपने एपीआई के माध्यम से संभालता है और कहा है कि यह भविष्य में बदल सकता है। – Jason
क्या होगा यदि आप 4.x में नहीं बदल सकते हैं? ऊपर विधि का प्रयोग करें? –
- 1. .NET अनुप्रयोग
- 2. .NET अनुप्रयोग
- 3. .NET अनुप्रयोग
- 4. .NET अनुप्रयोग
- 5. .NET अनुप्रयोग
- 6. .NET अनुप्रयोग
- 7. .NET अनुप्रयोग
- 8. .NET अनुप्रयोग
- 9. एक .NET वेब अनुप्रयोग
- 10. क्या .NET अनुप्रयोग
- 11. डाटाबेस तटस्थ .NET अनुप्रयोग
- 12. एक .NET अनुप्रयोग
- 13. प्रोफाइलिंग सी #/.NET अनुप्रयोग
- 14. एक .NET अनुप्रयोग
- 15. .NET C# अनुप्रयोग
- 16. मेरे .NET अनुप्रयोग
- 17. विंडोज़ .NET अनुप्रयोग
- 18. विंडोज़ .NET अनुप्रयोग
- 19. .NET अनुप्रयोग से एक्सप्लोरर
- 20. एक .NET अनुप्रयोग
- 21. एक .NET अनुप्रयोग
- 22. .NET अनुप्रयोग सर्वर बनाम जावा अनुप्रयोग सर्वर
- 23. साझा करना .NET अनुप्रयोग पूल
- 24. .NET अनुप्रयोग डोमेन क्या है?
- 25. उत्पन्न HTML एक .NET अनुप्रयोग
- 26. एक .NET कमांड लाइन अनुप्रयोग
- 27. .NET अनुप्रयोग जीसी थ्रेड डेडलॉक
- 28. मैक ओएस एक्स अनुप्रयोग के लिए .NET अनुप्रयोग?
- 29. क्या 32-बिट .NET अनुप्रयोग और 64-बिट .NET अनुप्रयोग के बीच कोई अंतर है?
- 30. टीएफएस 2010 .Net 4.0 XmlSerializers DLL .NET 3.5 अनुप्रयोग
पर्याप्त मेला - धन्यवाद जेरेड! – marijne
चेतावनी: एमएस कहता है कि यह दृष्टिकोण ("Wow6432Node" हार्डकोडिंग) समर्थित नहीं है। Http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspx – Richard
-1 देखें: यह व्यवहार Windows 7/Windows Server 2008 R2 में टूट जाता है, क्योंकि वे इसके बजाय साझा रजिस्ट्री कुंजी का उपयोग करते हैं: http : //msdn.microsoft.com/en-us/library/aa384253 (VS.85) .aspx – Powerlord