ClickOnce و IsolatedStorage

يتم إصدار تطبيق Winform باستخدام ClickOnce في الإنترانت. نقوم بتخزين تفضيل شخصي لواجهة المستخدم الرسومية في التخزين المعزول. كل يعمل بشكل جيد :)

المشكلة هي عندما يكون لدينا نسخة جديدة من التطبيق ، ننشر ... يتم فقد جميع التفضيلات! يحتاج المستخدم إلى إعداد تفضيله مرارًا وتكرارًا لكل إصدار.

هل هناك طريقة لتجميد العزلة للتطبيق بأكمله بدلاً من الإصدار؟

9

4 إجابة

يجب استخدام التطبيق في نطاق ، بدلاً من نطاق محدد النطاق ، التخزين المعزول. يمكن القيام بذلك باستخدام أحد الصانعين IsolatedStorageFileStream المحملة بشكل زائد.

مثال:

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

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

ومع ذلك ، ستواجه الآن مشكلة هذه الشفرة فقط عندما يتم تشغيل التطبيق عبر ClickOnce لأن هذا هو تطبيق الوقت الوحيد المتاح لتخزين البيانات المعزولة. إذا لم يتم الإطلاق عبر ClickOnce (على سبيل المثال من خلال Visual Studio) ، فسيؤدي GetUserStoreForApplication() إلى طرح استثناء.

إن المشكلة حول هذه هي التأكد من أن AppDomain.CurrentDomain.ActivationContext ليس فارغًا قبل محاولة استخدام التطبيق المعزول.

17
وأضاف
أي عينة التعليمات البرمجية المصدر الكامل؟ عينة باستخدام متغير "IsolatedStorageFileStream Fs"؟
وأضاف المؤلف Kiquenet, مصدر
سوف احاول ان اجرب هذا. يبدو أن أفضل إجابة حتى الآن.
وأضاف المؤلف Patrick Desjardins, مصدر
أنا أركض داخل VS وأنه لا يثير أي خطأ. أقبل إجابتك دون اختبارها بعد مع النشر الحقيقي. سأكتب هنا إذا لم ينجح. شكرًا
وأضاف المؤلف Patrick Desjardins, مصدر
أو يمكنك استخدام System.Deployment.Application.ApplicationDeployment.IsNetwor & zwnj؛ kDeployed لمعرفة ما إذا كان قد تم نشر التطبيق باستخدام ClickOnce ويمكنك استخدام GetUserStoreForApplication ()
وأضاف المؤلف bithavoc, مصدر

كنت أعمل على تطبيق ClickOnce قبل فترة واستخدم Environment.GetFolderPath (ApplicationData) - على سبيل المثال ، مجلد بيانات التطبيق المتجول ، لتخزين جميع الإعدادات. عملت بشكل جيد ونجت العديد من التحديثات. ما عليك سوى إنشاء نطاق فرعي باسم تطبيقك أو اسم الشركة/اسم التطبيق أو أيًا كان وتخزين كل شيء فيه.

4
وأضاف

يجب عليك تخزين نسخة دائمة من إعدادات المستخدم في مخزن أكثر متانة مثل قاعدة البيانات. يمكن أن يقرر تطبيقك استخدام التخزين المعزول إذا كان متاحًا. إذا لم يكن متوفرًا (بسبب إصدار أحدث) ، يجب أن يحصل التطبيق على الإعدادات من قاعدة البيانات ويستخدمها لإعادة تهيئة الإعدادات في مخزن معزول. إذا تم تغيير الإعدادات ، يجب عليك تحديث كلا المكانين. ما لم يكن هناك إصدار أحدث من التطبيق ، يجب ألا يكون تطبيقك بحاجة إلى الحصول على الإعدادات من DB.

1
وأضاف
كانت تلك فكرة أولية ، ولكن كان من المثير للاهتمام معرفة ما إذا كانوا يعملون حول: P
وأضاف المؤلف 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
وأضاف