अधिक जानकारी और लिंक से एक tidbit जो आपके प्रश्न के उत्तर:
"systemGUID या कुछ और" आप संदर्भ वास्तव में 2 बातें (संदर्भ MSDN My.Settings) के हैश है:
<eid> is the URL, StrongName, or Path, based on the evidence available to hash.
<hash> is a SHA1 hash of evidence gathered from the CurrentDomain,
in the following order of preference:
- StrongName
- URL If neither of these is available, use the .exe path.
एक के बिना StrongName, आपका स्थान पथ से भिन्न होता है जो आप वर्णन करते हैं। चूंकि दोनों ईद और हैश हैश (एसएस) के लिए स्ट्रॉन्गनाम का उपयोग करेंगे, इसलिए पूरा पथ वही रहना चाहिए, भले ही वे इसे कहीं और ले जाएं या एक नया संस्करण स्थापित करें। स्ट्रॉन्गनाम का उपयोग करते समय क्रेडेंशियल्स ऐप से आते हैं और हैश बदल नहीं जाते हैं और अंतिम उपाय (एक्सई पथ) की विधि का कभी भी उपयोग नहीं किया जाता है। जो आपके मूल प्रश्न का उत्तर देता है: एक मजबूत नाम का उपयोग करें और पथ बदल नहीं होगा।
नई रिलीज/संस्करण सेटिंग्स के लिए प्रत्येक संस्करण के लिए उस फ़ोल्डर के नीचे एक उप फ़ोल्डर पेड़ बना देगा। लिंक में उल्लिखित Settings
के लिए Upgrade
विधि (स्पष्ट रूप से) पिछले संस्करण से सेटिंग्स आयात करने की सुविधा प्रदान करता है। EXE नाम में एक परिवर्तन AppDomain.FriendlyName (तृतीय तत्व) को बदलने के लिए कारण होगा।
पृथक संग्रहण एक और विकल्प है, और यह उतना कठिन नहीं है जितना पहले दिखता है, लेकिन समान व्यवहार होता है। आईएसओ के साथ, आप एक फ़ोल्डर निर्दिष्ट नहीं करते हैं क्योंकि यह सिर्फ Users\<User>\Isolated Storage\zhxytg\dhfyres\
जैसे अस्पष्ट स्थान में से एक बनाता है। यदि आप ClickOnce का उपयोग करते हैं, तो स्थान ऐप के सभी संस्करणों के लिए भी वही रहता है, भले ही आप इसका नाम बदल दें (इसलिए, यह एक और व्यवहार्य समाधान है)।
मुझे लगता है कि आपको आवेदन स्तर के साक्ष्य प्राप्त करने के लिए क्लिकऑन (स्ट्रॉन्गनाम एक प्रतिस्थापन के रूप में नहीं आया है) का उपयोग करना होगा। आईएसओ के साथ, उच्चतम सुरक्षा के तहत भी, एक गैर व्यवस्थापक उपयोगकर्ता कम से कम W7 के साथ ProgramData\AllUsers
(लाइसेंस के मामले में हो सकता है, या ऐप सूट के लिए साझा सेटिंग्स) में साझा फ़ाइलों को पढ़/लिख सकता है। ऐप के हैश ने इसे उस पथ पर लिखने की अनुमति दी है, इसलिए यह कुछ चीजें कर सकता है जो हम आम तौर पर नहीं कर सकते हैं।
यदि आप क्लिकऑनेंस का उपयोग नहीं करते हैं, तो भी आप प्रति इंस्टॉल इंस्टॉल कर सकते हैं और AllUsers
पर पढ़/लिख सकते हैं। एक नया इंस्टॉल (एक अलग फ़ोल्डर में) के परिणामस्वरूप एक अलग हैश और फ़ाइल स्थान होगा; फ़ाइल नाम बदलने के साथ ही। भले ही आप पुराने स्थान को कहीं भी स्टोर करने में कामयाब रहे, फिर भी एक नए इंस्टॉलेशन को पुरानी फ़ाइल के अधिकार नहीं होंगे (कोशिश की गई है)।
आईएसओ EXEName द्वारा भिन्नता को हटा देता है, लेकिन यह My.Settings का उपयोग नहीं करता है। इसके बजाय आप IsolatedFileStreams
का उपयोग IsolatedStorageFile
ऑब्जेक्ट्स द्वारा बनाए गए हैं। और आपको विभिन्न सेटिंग्स के मूल्यों और नामों का आयोजन और प्रबंधन करना होगा। उपयोग किए गए पृथक भंडारण का प्रकार (ऐप/उपयोगकर्ता) उपलब्ध प्रमाण-पत्रों पर निर्भर करता है।
पृथक भंडारण की जगह है, लेकिन सेटिंग के लिए ओवरकिल लगता है।
आपने उल्लेख किया है कि आप आमतौर पर केवल छोटे ऐप्स के लिए MySettings का उपयोग करते हैं। इस प्रकार, सेटिंग के लिए पथ को स्थिर करने के लिए बस एक स्ट्रॉन्गनाम ओवरकिल लगता है। आईएसओ बहुत दिलचस्प है, लेकिन कुछ आसान है। यह तीसरा विकल्प or other things
में आता है जो आप नहीं चाहते थे, लेकिन बहुत लचीला है।
सीरियलाइजेशन के आसपास अपनी खुद की सेटिंग्स कक्षा बनाएं। सरल सेटिंग्स के लिए, ये संभवतः नाम-मूल्य जोड़े {LastPath = "....." के सेट से कहीं अधिक नहीं हैं; फॉर्म लिफ्ट = एक्स; FormTop = y ...}। एक Dictionary(Of String, String)
या Dictionary(Of enumSettings, String)
में इन सेव करें और बस को क्रमानुसार (बचाने के लिए) पूरे कंटेनर:
Dim bf As New BinaryFormatter
Using fs As New FileStream(myFile, FileMode.OpenOrCreate)
bf.Serialize(fs, _UserOpts)
End Using
मान वापस हो रही है बस के रूप में सरल है। अधिक जटिल परियोजनाओं के लिए जहां इंटीजर, डेट, ऐरे, ऐरेलिस्ट, सूची (टी) की तरह सहेजने के कई प्रकार हैं और इसके लिए, उनके लिए एक उपयोगकर्ता ऑप्शन क्लास बनाएं और को क्रमबद्ध करें।
ध्यान दें कि आप धारावाहिकों को एक फाइलस्ट्रीम पास करते हैं, इसलिए आपके पास नाम और स्थान पर पूर्ण नियंत्रण है, जैसे कि C:\Users\<username>\AppData\Local\<Company>\<Product>\Settings.bin
स्थान संस्करण, संस्कृति, असेंबली इत्यादि द्वारा स्थानांतरित नहीं होगा। यह आप कहां रखेंगे।
जब आप पॉइंट, साइज और फ़ॉन्ट जैसे प्रकारों को क्रमबद्ध करने का प्रयास करते हैं तो यह स्टीम से बाहर हो जाता है क्योंकि ऑब्जेक्ट्स को सीधे क्रमबद्ध नहीं किया जा सकता है। विशेष रूप से, प्रोटोबफ के साथ इन्हें फ्लाई या पहले से क्रमबद्ध करने के लिए कुछ विकल्प बदलने के लिए कई विकल्प हैं।
उस लिंक में इयान बॉयड की टिप्पणी का ध्यान रखें। फिर ध्यान दें कि बहुत कम गंभीर ऐप्स (मेरे सिस्टम पर कोई भी नहीं) डिफ़ॉल्ट/My.Settings का उपयोग करते हैं। डिफ़ॉल्ट बहुत आसानी प्रदान करता है, लेकिन न्यूनतम लचीलापन और कोई सुरक्षा नहीं है। स्टोरेज के लिए CompName \ Product location का उपयोग करने से आप जो कुछ भी चाहते हैं उसे कर सकते हैं (EXE नाम बदलें, TrialVer सेटिंग्स आयात करें, या एन्क्रिप्ट सेटिंग्स यदि किसी समाप्ति तिथि की तरह कुछ हो)। एक कस्टम सेटिंग्स क्लास कई असाइनमेंट के बिना सभी डेटा को सहेजने या लोड करने के लिए बाइनरी सीरियलाइज़र का उपयोग भी कर सकता है ('me.thisval = My.Settings.ThisVal')। जानकारी के लिए – Plutonix