क्लिकऑन और पृथक स्टोरेज

विनफॉर्म एप्लिकेशन को हमारे इंट्रानेट में क्लिकऑन के साथ रिलीज़ किया गया है। हम पृथक भंडारण में जीयूआई के लिए व्यक्तिगत वरीयता संग्रह करते हैं। सब ठीक काम करता है :)

समस्या तब होती है जब हमारे पास एप्लिकेशन का नया संस्करण होता है, हम प्रकाशित करते हैं ... सभी प्राथमिकताएं खो जाती हैं! उपयोगकर्ता को प्रत्येक संस्करण पर और अधिक अपनी वरीयता निर्धारित करने की आवश्यकता है।

क्या संस्करण के बजाए पूरे एप्लिकेशन के अलगाव को फ्रीज करने का कोई तरीका है?

9

4 उत्तर

आपको डोमेन स्कॉप्ड, पृथक भंडारण के बजाय एप्लिकेशन स्कॉप्ड का उपयोग करने की आवश्यकता है। यह IsolatedStorageFileStream's अधिभारित कन्स्ट्रक्टरों में से किसी एक का उपयोग करके किया जा सकता है।

उदाहरण:

using System.IO;
using System.IO.IsolatedStorage;
...

IsolatedStorageFile appScope = IsolatedStorageFile.GetUserStoreForApplication();    
using(IsolatedStorageFileStream fs = new IsolatedStorageFileStream("data.dat", FileMode.OpenOrCreate, appScope))
{
...

हालांकि, अब आप इस कोड के मुद्दे पर केवल तभी काम करेंगे जब एप्लिकेशन क्लिकऑन के माध्यम से लॉन्च किया गया हो क्योंकि यह एकमात्र समय एप्लिकेशन स्कॉप्ड पृथक भंडारण उपलब्ध है। यदि आप ClickOnce (जैसे विजुअल स्टूडियो के माध्यम से) के माध्यम से लॉन्च नहीं करते हैं, तो GetUserStoreForAplication() अपवाद फेंक देगा।

यह समस्या यह सुनिश्चित करने के लिए है कि AppDomain.CurrentDomain.ActivationContext अनुप्रयोग स्कॉप्ड पृथक भंडारण का उपयोग करने का प्रयास करने से पहले शून्य नहीं है।

17
जोड़ा
कोई पूर्ण स्रोत कोड नमूना? "IsolatedStorageFileStream fs" चर का उपयोग कर नमूना?
जोड़ा लेखक Kiquenet, स्रोत
मैं कोशिश करूँगा। अभी तक का सबसे अच्छा जवाब माना जाता है।
जोड़ा लेखक Patrick Desjardins, स्रोत
मैं वीएस के अंदर दौड़ रहा हूं और यह कोई त्रुटि नहीं उठाता है। मैं अभी तक वास्तविक तैनाती के साथ परीक्षण किए बिना आपका उत्तर स्वीकार करता हूं। अगर यह काम नहीं करता है तो मैं यहां वापस लिखूंगा। धन्यवाद
जोड़ा लेखक Patrick Desjardins, स्रोत
या आप System.Deployment.Aplication.AplicationDeployment.IsNetwor और zwnj; kDeployed का उपयोग यह जानने के लिए कर सकते हैं कि ऐप को ClickOnce के साथ तैनात किया गया था और आप GetUserStoreForApplication() का उपयोग कर सकते हैं
जोड़ा लेखक bithavoc, स्रोत

मैं थोड़ी देर पहले एक क्लिकऑन ऐप पर काम कर रहा था और पर्यावरण का उपयोग करता था। गेटफोल्डर पैथ (एप्लीकेशनडाटा) - उदा। सभी सेटिंग्स को स्टोर करने के लिए रोमिंग ऐप डेटा फ़ोल्डर। ठीक काम किया और कई अद्यतन बच गए। बस अपने ऐप या कंपनीनाम/ऐपनाम के नाम के साथ एक उप-मंडली बनाएं या जो भी हो और सब कुछ स्टोर करें।

4
जोड़ा

आपको डेटाबेस की तरह एक अधिक टिकाऊ स्टोर में उपयोगकर्ता सेटिंग्स का स्थायी संस्करण स्टोर करना होगा। यदि आपका आवेदन उपलब्ध है तो अलग-अलग भंडारण का उपयोग करने का निर्णय ले सकता है। यदि यह उपलब्ध नहीं है (एक नए संस्करण की वजह से), ऐप को डेटाबेस से सेटिंग्स प्राप्त करनी चाहिए और अलग भंडारण में सेटिंग्स को फिर से शुरू करने के लिए इसका उपयोग करना चाहिए। यदि सेटिंग्स बदल दी गई हैं, तो आपको दोनों जगहों को अपडेट करना चाहिए। जब तक ऐप का कोई नया संस्करण न हो, तब तक आपके ऐप को डीबी से सेटिंग्स प्राप्त नहीं करनी चाहिए।

1
जोड़ा
वह मील प्रारंभिक विचार था, लेकिन मुझे यह जानना दिलचस्प था कि क्या वे चारों ओर एक काम थे: पी
जोड़ा लेखक Patrick Desjardins, स्रोत
आप सेटिंग फ़ाइल को उपयोगकर्ता की हार्ड ड्राइव पर किसी विशिष्ट स्थान पर स्टोर कर सकते हैं लेकिन आपको ऐप को पूर्ण-विश्वास करना होगा ..
जोड़ा लेखक Gulzar Nazim, स्रोत

अन्य उत्तरों से सारांश:

IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();//for visual studio
if (System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed)
{
    isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();//for click once applications
}
0
जोड़ा