2009-04-16 9 views
22

मेरे पास मेरे app.config में कुछ सेटिंग्स हैं जिन्हें मैं 'वैश्विक' होना चाहता हूं - यानी। कोई भी उपयोगकर्ता उन्हें बदल सकता है, और सभी उपयोगकर्ताओं को एक ही सेटिंग मिलती है।एप्लिकेशन सेटिंग्स केवल app.config में क्यों पढ़ी जाती हैं?

लेकिन जब तक कि मैं उन्हें उपयोगकर्ता सेटिंग्स के रूप में नहीं बदलता, वे केवल पढ़े जाते हैं।

ऐसा क्यों है?

और मुझे अपने ऐप की वैश्विक सेटिंग्स को जारी रखने के बारे में कैसे जाना चाहिए?

संपादित करें:

यह वास्तव में एक खिड़कियों सेवा आवेदन जो स्थानीय सिस्टम के रूप में एक सेवा के रूप में चलाता है। इसे स्थानीय व्यवस्थापक द्वारा "/ config" तर्क के साथ मैन्युअल रूप से चलाया जा सकता है, जो कॉन्फ़िगरेशन मानों को संपादित करने के लिए एक विंडोज़ फॉर्म लॉन्च करता है।

तो दोनों स्थितियों में %PROGRAMFILES% पर पहुंच पहुंच होगी।

तरह से मैं अपने सेटिंग को एक्सेस कर रहा हूँ thusly है:

Settings.Default.MySetting = MyNewValue; 

और जब MySetting आवेदन पर सेट है (अपने प्रोजेक्ट गुण में, Settings.settings), मैं एक संकलन समय त्रुटि मिलती है "MySetting पढ़ा जाता है केवल"।

मैं इस सामान के लिए नया हूं, और अभी तक यह बहुत अच्छा स्पष्टीकरण नहीं मिला है कि इसे कैसे किया जाना चाहिए। उदाहरण के लिए, मुझे 'डिफ़ॉल्ट' कहने की ज़रूरत क्यों है, और इसका वास्तव में क्या अर्थ है? मुझे पता नहीं है। अगर कोई मुझे ऐप.कॉन्फिग उपयोग ट्यूटोरियल पर इंगित कर सकता है, तो यह वास्तव में सहायक होगा।

उत्तर

47

असली पूरा जवाब:

app.config सेटिंग्स केवल पढ़ने के लिए कर रहे हैं क्योंकि वहाँ सेटिंग्स के 2 प्रकार हैं:

  1. ऐप्लिकेशन सेटिंग
  2. उपयोगकर्ता सेटिंग

पहले तब तक नहीं बदलेगा जब तक कि एप्लिकेशन प्रकाशक इसका एक नया संस्करण प्रकाशित न करे। दूसरा app.config में संग्रहीत नहीं है, लेकिन user.config फ़ाइल में। इस user.config फ़ाइल की अनुपस्थिति में app.config डिफ़ॉल्ट मान प्रदान करता है।

तो MySetting एक उपयोगकर्ता सेटिंग है:

Settings.Default.MySetting = MyNewValue; 
Settings.Default.Save(); 

यह नई सेटिंग्स के साथ [User Local Settings Application Data]\[company name]\[application].exe[hash string]\[version] पर एक user.config फ़ाइल बनाने जाएगा, और उन सेटिंग्स app.config फ़ाइल में सेटिंग्स पर प्रबल होगा।

+1

इसे "उत्तर" के रूप में चिह्नित किया जाना चाहिए। बहुत अच्छी तरह से समझाया। – Askolein

+0

हाय। क्या आप इस सवाल को देख सकते हैं? http://stackoverflow.com/questions/39791332/application-creates-folder-with-in-place-for-space-in-name-when-using-proper – Pritam

4

क्यों: एप्लिकेशन सेटिंग्स प्रोग्राम फ़ाइलों के तहत एप्लिकेशन फ़ोल्डर में संग्रहीत करने का इरादा है जहां उपयोगकर्ता के पास लेखन विशेषाधिकार नहीं हैं।

कैसे: "सभी उपयोगकर्ता" के लिए कोई डिफ़ॉल्ट समर्थन नहीं है लेकिन आप सार्वजनिक फ़ोल्डर में अपनी कस्टम कॉन्फ़िगरेशन फ़ाइल सेट करने या डेटाबेस का उपयोग करने में सक्षम होना चाहिए।

1

बिल्कुल यकीन नहीं है कि आपका क्या मतलब है। क्या आपका मतलब है कि आपने उपयोगकर्ताओं को UI से app.config को बदलने की अनुमति दी है और परिवर्तन जारी नहीं हैं?

आप

ConfigurationManager.RefreshSection("appSettings"); 

और

Configuration.Save(); 
+1

मेरा संपादन देखें। मैं सेटिंग्स.डिफॉल्ट का उपयोग कर रहा हूं, कॉन्फ़िगरेशन मैनेजर नहीं - क्या यह app.config पढ़ता है? – Blorgbeard

0

एक कारण यह फोन किया था कि app.config फ़ाइल प्रोग्राम फ़ाइलें निर्देशिका के अंतर्गत यदि आपके ऐप की फ़ोल्डर में है, और प्रोग्राम फ़ाइलें में सब कुछ केवल पढ़ने के लिए है डिफ़ॉल्ट रूप से मानक उपयोगकर्ताओं के लिए।

दूसरा यह है कि app.config सेटिंग्स सिस्टम को व्यापक रूप से लागू करती हैं। यदि कोई उपयोगकर्ता परिवर्तन करता है तो यह अन्य उपयोगकर्ताओं को प्रभावित करेगा। सामान्य उपयोगकर्ता उस तरह के परिवर्तन करने में सक्षम नहीं होना चाहिए। कुछ भी जो कई उपयोगकर्ताओं को प्रभावित कर सकता है केवल एक सिस्टम प्रशासक सेट किया जाना चाहिए। प्रति उपयोगकर्ता सेटिंग्स प्रत्येक उपयोगकर्ता के एप्लिकेशन डेटा फ़ोल्डर में संबंधित हैं।

+0

यह ठीक है - मैं केवल सिस्टम प्रशासक को अपने सिस्टम के भीतर से इन सिस्टम-व्यापी सेटिंग्स को बदलने में सक्षम होना चाहता हूं। लेकिन यह संभव नहीं लगता है, भले ही मैं व्यवस्थापक के रूप में चल रहा हूं। – Blorgbeard

0

जब आप एप्लिकेशन प्रारंभ करते हैं तो कॉन्फ़िगरेशन सेटिंग्स मेमोरी में कैश की जाती हैं। आप app.config फ़ाइल को मानों को बदलने के लिए xml के रूप में सौदा कर सकते हैं।

3

बस शब्दों में कहें: मशीन पर कोई स्थान नहीं है कि हर कोई बदल सकता है, जब तक कि आप ऐसा करने के लिए विशेषाधिकार न दें।

  • आप एक विन्यास फाइल बना सकते हैं/कुछ रजिस्ट्री सेटिंग्स, "सभी उपयोगकर्ताओं" प्रोफ़ाइल में इस डाल दिया और "सभी" अधिकार प्रदान:

    वहाँ स्थिति के इस प्रकार से निपटने के लिए कई तरीके हैं उस विशिष्ट फ़ाइल को बदलने के लिए। स्थापना के दौरान आप एप्राइपिएट विशेषाधिकार देने के लिए प्रक्रिया को स्वचालित कर सकते हैं और आपका प्रोग्राम बाकी को संभाल सकता है।

  • आप यह सुनिश्चित करने के लिए यूएसी का लाभ उठा सकते हैं कि वर्तमान उपयोगकर्ता को सिस्टम-व्यापी सेटिंग बदलने के लिए एप्राइपिएट विशेषाधिकार हैं। यह अनुशंसित दृष्टिकोण है लेकिन इसका मतलब यह भी है कि हर कोई विशिष्ट सेटिंग्स को बदल नहीं सकता है।

  • आप एक साझा डेटाबेस का उपयोग कर सकते हैं और वहां अपनी सेटिंग्स स्टोर कर सकते हैं।

  • ???

मैं प्रोग्राम फ़ाइलों निर्देशिका में आइटम बदलने या डिफ़ॉल्ट विशेषाधिकारों को बदलने की अनुशंसा नहीं करता।

संपादित करें: स्थानीय सिस्टम के रूप में आपने वास्तव में प्रोग्राम फ़ाइलों निर्देशिका में विशेषाधिकार लिखते हैं। अगर आपको "केवल पढ़ने" त्रुटि मिलती है, तो इसका मतलब है कि सेटिंग्स केवल ही पढ़ी जाती हैं। कॉन्फ़िगरेशन फ़ाइलों में सेटिंग्स को बदलने में सक्षम होने के लिए आपको कॉन्फ़िगरेशन प्रबंधक का उपयोग करने की आवश्यकता होगी।

उम्मीद है कि इससे मदद मिलती है।

+0

क्या आप "कॉन्फ़िगरेशन प्रबंधक का उपयोग" पर विस्तार कर सकते हैं? कोई सहायक लिंक? – Blorgbeard

+1

निश्चित रूप से, यहां एक नज़र डालें: http://msdn.microsoft.com/en-us/library/system.configuration.configuration.aspx –

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