2013-03-23 11 views
6

मेरे पास एक ऐसा प्रोग्राम है जिसे मैं वीएस में बनाए गए तैनाती के लिए पैकेज का उपयोग करके तैनात करने जा रहा हूं।उपयोगकर्ताओं को तैनाती के बाद कॉन्फ़िगरेशन फ़ाइल संपादित करने दें

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

मैं जो सोच रहा था वह है - मैं उपयोगकर्ता को कुछ निर्देशिका निर्दिष्ट करने के लिए कहता हूं (जिसे किसी भी खेल के बाद से होने की आवश्यकता है) - मैं वहां कॉन्फ़िगर फ़ाइल की जांच करता हूं, और यदि वहां नहीं है, तो मैं इसे रूट से कॉपी करता हूं निर्देशिका प्रोग्राम देख सकता है - फिर 'सेव' फ़ोल्डर में से एक को पढ़ें।

उसने कहा, यह बहुत बदसूरत और हैकी समाधान की तरह लग रहा है - क्या कोई बेहतर है?

उत्तर

8

मैं उपयोगकर्ताओं को app.config को संशोधित करने के लिए प्रोत्साहित नहीं करता। App.config को उसी ऐप में कॉपी किया जाता है जैसे आपके ऐप exe और आमतौर पर ऐसी सेटिंग्स होती है जो आपका ऐप सही ढंग से चलाने के लिए निर्भर करता है उदा। डीबी कनेक्शन स्ट्रिंग्स, सिस्टम डिफॉल्ट इत्यादि। आप उपयोगकर्ताओं को सीधे सेटिंग में बदलाव करने के लिए एक खतरनाक खेल खेल रहे हैं।

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

मैं इसके लिए कुछ प्रकार के यूआई को लागू करने की भी सिफारिश करता हूं, भले ही यह वास्तव में मूलभूत हो। आपका औसत उपयोगकर्ता आसानी से एक्सएमएल संपादन करने वाला नहीं है, त्रुटि के लिए बहुत अधिक मार्जिन।

+0

सहमत - उपयोगकर्ता को app.config संपादित करने की अनुमति देना सीधे परेशानी के लिए पूछ रहा है क्योंकि परिणामस्वरूप किसी भी अपवाद को संभालना आपके लिए कठिन है। यदि आप अपनी खुद की serlializable वर्ग रोल करते हैं और अपने भंडारण का प्रबंधन करते हैं, तो अपवादों को संभालना आसान है। –

+0

दिलचस्प, उस पर विचार नहीं किया। मुझे लगता है कि मैं अपना खुद का प्रारूप रोल करूंगा क्योंकि मैं एक्सएमएल को हाथ से संशोधित करने के प्रशंसक नहीं हूं, और मुझे यकीन नहीं है कि मुझे कितने पैरामीटर की आवश्यकता होगी (शायद टन) – Haedrian

+0

आपके रोलिंग के खिलाफ कुछ भी नहीं हालांकि, अपना प्रारूप, बस ध्यान दें कि आपको अपना खुद का धारावाहिक रोल करने की भी आवश्यकता होगी। जहां .NET के पास बहुत बड़ा एक्सएमएल समर्थन है, जिसमें इस छोटी सी चीज की तरह कुछ करना होगा। – James

1

आप एप्लिकेशन (या उपयोगकर्ता) सेटिंग्स का उपयोग किसी भी बदलाव को जारी रखने के लिए कर सकते हैं जो उपयोगकर्ता कॉन्फ़िगरेशन में करना चाहते हैं। ApplicationSettingsBase कक्षा और this article देखें।

public class MyUserSettings : ApplicationSettingsBase 
{ 
    [UserScopedSetting()] 
    [DefaultSettingValue(0)] 
    public int Rank 
    { 
     get 
     { 
      return (int)this["Score"]; 
     } 
     set 
     { 
      this["Score"] = value; 
     } 
    } 
} 

आप वर्तमान मूल्यों को बचा सकता है, आम तौर पर जब मुख्य रूप बंद हो रहा है, Save विधि का उपयोग कर:

myUserSettings.Save(); 
आपके आवेदन एक उपयोगकर्ता सेटिंग Score कहा जाता है, एक वर्ग MyUserSettings बुलाया द्वारा आंतरिक रूप से प्रबंधित शामिल कहो

यदि आप चाहते हैं कि उपयोगकर्ता सीधे कुछ सेटिंग्स संशोधित करें, तो आप एक संपत्ति ग्रिड या अपने स्वयं के फॉर्म का उपयोग कर सकते हैं जो MyUserSettings कक्षा के उदाहरण को बाध्य करता है। यदि सेटिंग्स को "उपयोगकर्ता" के रूप में चिह्नित किया गया है, तो मान user.config फ़ाइल में %InstallRoot%\Documents and Settings\username\Local Settings या %InstallRoot%\Documents and Settings\username\Application Data (रोमिंग प्रोफाइल के लिए) में संग्रहीत किए जाएंगे।

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

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