Properties.Settings.Default कहाँ संग्रहीत हैं?


145

मुझे लगा कि मैं यह जानता हूं, लेकिन आज मैं गलत साबित हो रहा हूं - फिर से।

VS2008, .NET 3.5 और C # चल रहा है। मैंने डिफ़ॉल्ट सेटिंग्स के साथ गुण सेटिंग्स टैब में उपयोगकर्ता सेटिंग्स को जोड़ा, फिर इस कोड का उपयोग करके उन्हें पढ़ें:

myTextBox.Text = Properties.Settings.Default.MyStringProperty;

फिर, उपयोगकर्ता द्वारा डायलॉग में सेव किए गए ऑप्शन डायलॉग में वैल्यू एडिट करने के बाद:

Properties.Settings.Default.MyStringProperty = myTextBox.Text;
Properties.Settings.Default.Save();

मेरा सवाल यह है कि यह नया मूल्य कहाँ बचा है? निष्पादन योग्य निर्देशिका में MyApp.exe.config फ़ाइल अद्यतन नहीं है, इसमें अभी भी डिफ़ॉल्ट मान शामिल हैं। इसके अलावा, जहाँ तक मैं बता सकता हूँ, उस निर्देशिका में कोई भी अन्य फाइल अपडेट नहीं है! हालाँकि, जब प्रोग्राम वापस मान पढ़ता है, तो उसे परिवर्तित मान प्राप्त होता है, इसलिए मुझे पता है कि यह कहीं सहेजा गया है ...

यह सिर्फ अकादमिक नहीं है, मुझे आज सुबह मूल्य को मैन्युअल रूप से संपादित करने में सक्षम होने की आवश्यकता है और जब कुछ भी बदल रहा था, तो मुझे खुद को नहीं मिला।


2
यह ध्यान रखना महत्वपूर्ण है कि भंडारण स्थान फ्रेमवर्क या ओएस के विभिन्न संस्करणों के बीच बदल सकता है। भंडारण स्थान के लिए प्रोग्रामेटिक कुछ भी हार्डकोड न करें।
ग्रेग डी

यदि आप विज़ुअल स्टूडियो में हैं, एक नया ऐप विकसित कर रहे हैं, तो AppData \ Local \ Microsoft \ Your APPLICATION NAME फ़ाइल का नाम user.config देखें। मैं विंडोज 7 में हूं
जेनॉनड

या AppData \ Local एक के तहत
KansaiRobot

मैं जिस चीज़ से जूझ रहा था, उसने मुझे इस सवाल और अन्य लोगों तक पहुँचाया: user.config जब तक नहीं बनाया जाता है जब तक कि अनुप्रयोगों को सेट नहीं किया जाता है। (); कहा जाता है। (जहाँ एप्लीकेशनसेटिंग को परिभाषित किया जाता है एप्लीकेशनसेटिंग एप्लीकेशनसेटिंग = नया एप्लीकेशनसेटिंग (यह);)।
मिलाना

जवाबों:


142

केवल कार्यक्रम फ़ाइलों फ़ोल्डर में डिफ़ॉल्ट रूप से पढ़ने की अनुमति के विंडोज की नीति के नए संस्करणों के साथ काम करने के लिए (जब तक कि आप यूएसी के साथ उन्नयन के लिए संकेत नहीं देते हैं, लेकिन यह एक और विषय है ...), आपके आवेदन के तहत एक सेटिंग्स फ़ोल्डर होगा %userprofile%\appdata\localया %userprofile%\Local Settings\Application Dataउपयोगकर्ता विशिष्ट हैं सेटिंग्स के लिए, आप विंडोज के किस संस्करण के आधार पर चल रहे हैं। आप सभी उपयोगकर्ताओं के लिए सेटिंग्स को संग्रहीत है, तो वे के तहत इसी फ़ोल्डर में हो जाएगा C:\usersया C:\Documents and Settingsसभी उपयोगकर्ता प्रोफ़ाइल के लिए (पूर्व: C:\users\public\appdata\local)।


3
इसके अलावा, .config विजुअल स्टूडियो में उत्पन्न होता है, जो निष्पादन योग्य फ़ोल्डर में समाप्त होता है, मेरा मानना ​​है कि केवल डिबगिंग के लिए उपयोग किया जाता है। जब अंतिम एप्लिकेशन की पैकेजिंग करते हैं, तो आप इसे शामिल नहीं करते हैं .config, क्योंकि यह पहली बार उत्पन्न होता है जब उपयोगकर्ता एप्लिकेशन चलाता है।
एडिन्स ने

11
नए संस्करण? विंडोज़ 2000 के बाद से यह मामला है। आप इसके साथ भाग गए क्योंकि आप व्यवस्थापक के रूप में चल रहे थे।
जोएल कोएहॉर्न

1
@Joel Coehoorn: यह सच है, हालांकि अब Windows Vista में व्यवस्थापक खाते में, आप डिफ़ॉल्ट रूप से UAC ऊंचाई प्रॉम्प्ट के बिना प्रोग्राम फ़ाइलों तक लेखन पहुंच प्राप्त नहीं कर सकते। यही नीति बदल गई। :)
जसोहन

2
यह भी ध्यान दिया जाना चाहिए कि फ़ोल्डर हर संस्करण के उन्नयन के साथ बदलता है - इसलिए उपयोगकर्ता सॉफ़्टवेयर को अपडेट करने के बाद हर बार अपनी प्राथमिकताएं खो देता है।
इयान बॉयड 21

17
वास्तव में, वे नहीं। आपको एक सेटिंग बनाने की ज़रूरत है, इसे "अपग्रेडेड" जैसे कुछ नाम दें और इसे सही पर डिफ़ॉल्ट करें। फिर जब आपका ऐप शुरू हो जाए, तो यह जांचें। अगर यह सही है, तो Properties.Settings.Default.Upgrad (), .Save () और .Reload () को कॉल करें। फिर अपग्रेडन को गलत और सेव पर अपग्रेड करें।
जासं

86

आप पथ को प्रोग्रामेटिक रूप से प्राप्त कर सकते हैं:

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;

1
हम्म, मैं उन स्थितियों को देख रहा हूं, जहां से लौटा गया रास्ता सेटिंग द्वारा उपयोग किया गया पथ नहीं है। कोई अंतर्दृष्टि?
जॉर्ज मौअर

1
@GeorgeMauer आप Roamingया शायद के LocalLowबजाय मतलब है Local? ConfigurationUserLevelउपयोगकर्ता की प्रोफ़ाइल रोमिंग या स्थानीय होने पर निर्भर करती है। कंपनियों में यह अक्सर घूम रहा है।
काय ज़ेड

से लिंक करना क्या यह उत्तर और इसके तहत मेरी टिप्पणी, दिखा पथ लगता है कि क्या।
काय ज़ेड

मुझे हर जगह एक ही उत्तर मिल रहा है, configurationManager.OpenExeConfiguration () का उपयोग करें - लेकिन यह तीन विकल्प देता है, जिसके आधार पर आप जो कॉन्फ़िगरेशनUserLevel पास करते हैं, जो तीन अलग-अलग परिणाम देते हैं - जो यह है? आपको पता कैसे चलेगा, किसी प्रोग्राम में, कोड में, रन टाइम पर, वास्तव में किस फाइल से प्रोग्राम को इसकी सेटिंग मिल रही है?
डेव

कोई नहीं: सभी उपयोगकर्ताओं पर लागू होने वाला कॉन्फ़िगरेशन हो जाता है, PerUserRoaming: वर्तमान उपयोगकर्ता पर लागू रोमिंग कॉन्फ़िगरेशन हो जाता है, PerUserRoamingAndLocal: वर्तमान उपयोगकर्ता पर लागू होने वाला स्थानीय कॉन्फ़िगरेशन हो जाता है।
अकबरीबार

8

मुझे सही दिशा बताने के लिए धन्यवाद। मुझे इस monstrosity पर स्थित user.config मिला: c: \ users \ USER \ AppData \ Local \ Company \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user .config।

मुझे अपने आवेदन पर संस्करण को बढ़ाना पड़ा और सभी सेटिंग्स गायब हो गई लगती थीं। एप्लिकेशन ने नए संस्करण के साथ एक नया फ़ोल्डर बनाया और डिफ़ॉल्ट सेटिंग्स का उपयोग किया। फ़ाइल कहां संग्रहीत की गई थी, यह पता लगाने के लिए हमेशा के लिए ले लिया गया, लेकिन तब यह एक सरल प्रतिलिपि थी और नए संस्करण में सेटिंग्स प्राप्त करने के लिए पेस्ट किया गया था।


कैसे जानें LOOKSLIKESOMEKINDOFHASH?
NeoSvet

1
Properties.Settings.Default.Upgrad () कॉल स्वचालित रूप से ऐसा ही करेगी। यह अपने पिछले संस्करण से कॉन्फिगरेशन को पुनर्स्थापित करता है, ठीक उसी तरह जैसा @ajonh ने अन्य उत्तर में कहा था।
एलेक्स

5

यह आपके दस्तावेज़ और सेटिंग्स \% उपयोगकर्ता% \ Local Settings \ Application Data ...... आदि एक फ़ाइल कहा जाता है के लिए खोज में सहेजा गया है user.config वहाँ

हालांकि स्थान बदल सकता है।


5
वास्तव में, उपयोगकर्ता-विशिष्ट गुणों के लिए सही पर्यावरण चर% userprofile% है। विस्टा या 7 के तहत दस्तावेजों और सेटिंग्स को निर्दिष्ट करने से या तो एक लापता फ़ोल्डर या उस फ़ोल्डर को लापता अनुमतियों का परिणाम मिलेगा जो इसे ढूंढता है।
जसन

1

मेरी एक विंडोज़ सेवा विंडोज़ सर्वर 2016 में स्थानीय सिस्टम के रूप में लॉग ऑन है, और मैं C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {आपके एप्लिकेशन नाम} के तहत user.config पा सकता हूं।

मुझे लगता है कि सबसे आसान तरीका सी ड्राइव पर आपके एप्लिकेशन नाम को खोज रहा है और फिर जांचें कि user.config कहां है


0

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

मुझे नहीं पता कि आपको क्या उम्मीद थी, क्योंकि उपयोगकर्ता अक्सर पहली जगह में निष्पादन योग्य निर्देशिका तक पहुंच नहीं लिखते हैं।


0

वे YOUR_APP.exe.configफ़ाइल में सहेजे जाते हैं , फ़ाइल को उसी फ़ोल्डर में YOUR_APP.exeफ़ाइल, <userSettings>अनुभाग के साथ सहेजा जाता है :

   <userSettings>
      <ShowGitlabIssues.Properties.Settings>
         <setting name="SavedUserName" serializeAs="String">
            <value />
         </setting>
         <setting name="SavedPassword" serializeAs="String">
            <value />
         </setting>
         <setting name="CheckSave" serializeAs="String">
            <value>False</value>
         </setting>
      </ShowGitlabIssues.Properties.Settings>
   </userSettings>

यहाँ cs कोड है:

public void LoadInfoLogin()
{
    if (Properties.Settings.Default.CheckSave)// chkRemember.Checked)
    {
        txtUsername.Text = Properties.Settings.Default.SaveUserName;
        txtPassword.Text = Properties.Settings.Default.SavePassword;
        chkRemember.Checked = true;
    }
...

-1

किसी के लिए भी यह सोचकर कि Microsoft स्टोर से ऐप्स के लिए सेटिंग या तो वे WindowsApps में हैं, जो बहुत लॉक है, लेकिन आप अपना ऐप खोलकर और फिर टास्क-मैनेजर के साथ फ़ाइल पथ को खोलकर वहां पहुंच सकते हैं।

लेकिन यह अधिक संभावना है कि वे इसमें बच गए हैं C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.


-17

आपके प्रोजेक्ट रूट फ़ोल्डर के अंतर्गत "गुण" नामक एक फ़ोल्डर है, और उस फ़ोल्डर के अंतर्गत * .settings फ़ाइल हैं। बस यहीं जमा हो जाता है।


1
यह विकास के दौरान सही है । तैनाती के बाद वे अन्यत्र चले जाते हैं।
जोएल कोएहॉर्न

2
मैं एक विकास के माहौल में यह चल रहा था और फ़ाइल अपरिवर्तित रही। यह केवल वहाँ डिफ़ॉल्ट मान संग्रहीत करता है, अद्यतन नहीं।
स्टेन आर।

4
स्टेन आर सही है, यह केवल डिफ़ॉल्ट मान संग्रहीत करता है। डीबगिंग के दौरान आपके द्वारा बदले जा सकने वाले मान नहीं।
बेनामी टाइप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.