मैं इस तरह रजिस्ट्री करने के लिए एक रजिस्ट्री उपकुंजी और उसके संबंधित मान लिखने का प्रयास किया:रजिस्ट्री को अपेक्षाकृत अलग स्थान पर क्यों लिखा जाता है?
const string subKey = @"SOFTWARE\Apple\Banana\";
const string regKey = "pip";
var rk = Registry.LocalMachine.OpenSubKey(subKey);
if (rk == null)
rk = Registry.LocalMachine.CreateSubKey(subKey);
var rv = rk.GetValue(regKey);
if (rv == null)
rk.SetValue(regKey, "XXX");
return rv.ToString();
अब समस्या यह है कि मैं जब मैं स्थान में मैन्युअल रूप से देखने के लिए (regedit के माध्यम से) मैं HKLM
में फ़ोल्डर SOFTWARE\Apple\Banana
नहीं देख सकता है ।
लेकिन जब मैं उपर्युक्त कोड को फिर से चलाता हूं और डीबग करता हूं, तो मैं देख सकता हूं कि Registry.LocalMachine.OpenSubKey(subKey)
और rk.GetValue(regKey)
पहले सहेजे गए मान उत्पन्न करता है। फिर भी मुझे regedit के माध्यम से दिए गए स्थान में मूल्य नहीं दिखता है। तो रजिस्ट्री खोज पर, मैं निम्न स्थानों में ऊपर कुंजी और मूल्यों देख सकते हैं:
HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana
HKEY_USERS\S-1-5-21-44266131-1313801407-2392705078-1000\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana
जो दोनों मान बिल्कुल रहने के रूप में मैं बचाया के तहत। तो मुझे लगता है इस जहाँ मेरे एप्लिकेशन मूल्य हालांकि मेरे कोड में मैं HKLM\SOFTWARE\Apple\Banana\
से इसे कहते पढ़ता से है ..
हो रहा क्यों है? क्या यह एक्सेस अधिकार मुद्दे से संबंधित है?
क्या यह अपेक्षित व्यवहार है? इस अर्थ में, यह मूल्य मेरे लिए बहुत महत्वपूर्ण है, इसलिए मैं केवल यह जान रहा हूं कि ऑटो-रिलायंस से जुड़े कुछ जोखिम हैं या नहीं!
वहाँ बहुत रजिस्ट्री करने के लिए है कि यह अपने सटीक स्थान में रहता है लेखन का एक उचित तरीका है ..
मेरा खाता व्यवस्थापक से एक है, और मैं 32 बिट विंडोज़ 7
उपयोग कर रहा हूँ संपादित करें: जैसा कि मुझे पता चला, रजिस्ट्री प्रविष्टि HKLM की बजाय मौजूदा उपयोगकर्ताओं के स्थान पर संग्रहीत है। और जब मैं एक अलग खाते से reg मूल्य के लिए पूछता हूं, तो मुझे मूल्य नहीं मिलता है। संक्षेप में, सभी HKLM में सहेजकर :(
अपनी टिप्पणी का उत्तर दें "लेकिन क्या इसका मतलब यह नहीं है कि भविष्य में उपयोगकर्ता एचकेएलएम में उसी स्थान पर पूछताछ कर रहे हैं जो वर्तमान उपयोगकर्ता स्थान में मौजूद मूल्य प्राप्त नहीं कर सकता है? ठीक है, मैं इसे किसी भी तरह से परीक्षण करने जा रहा हूं" - हाँ यह करता है। रजिस्ट्री और प्रोग्राम फ़ाइलों और प्रोग्रामडेटा निर्देशिका में एचएलएम केवल सेटअप के दौरान लिखा जाना चाहिए। केवल प्रशासक ही अन्यथा लिख सकते हैं (और केवल यूएसी सक्षम होने पर ऊंचाई के साथ)। –
@DannyVarod मुझे आपकी पहली वाक्य नहीं मिली। वैसे भी जब मैंने परीक्षण किया, तो मुझे यह जानने में आया कि वर्चुअलाइजेशन मदद नहीं करता है यदि आप सभी उपयोगकर्ताओं के लिए एक ही रजिस्ट्री मान प्राप्त करना चाहते हैं .. – nawfal
विंडोज 6+ में विभिन्न स्थान हैं जो केवल सेटअप डेटा को पकड़ने के लिए हैं और ऐसे अन्य स्थान भी हैं रनटाइम डेटा या डेटा को पकड़ने के लिए जो रन टाइम के दौरान बदलता है। सेटअप के दौरान, उपयोगकर्ताओं को सेटअप स्थानों (यूएसी के माध्यम से व्यवस्थापक द्वारा) लिखने की अनुमति दी जाती है। रनटाइम विंडोज़ के दौरान इन स्थानों तक पहुंच को रोकता है जब तक उपयोगकर्ता व्यवस्थापक नहीं होता है। (गैर प्रशासकों को अन्य उपयोगकर्ताओं को प्रभावित नहीं करना चाहिए।) –