إيسولاتيدستوراجيكسسيبشن:غير قادر على إنشاء مخزن الدليل

StackOverflow https://stackoverflow.com/questions/1035576

سؤال

مرحبا لدي لتخزين بعض المعلومات المخفية في مساحة منعزلة.لذلك أنا باستخدام النظام.IO.عزل فئة مثل

IsolatedStorageFile isf =     System.IO.IsolatedStorage.IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
Stream writer = new IsolatedStorageFileStream(filename, FileMode.Create, isf);

IFormatter formatter = new BinaryFormatter();
formatter.Serialize(writer, appCollection.ToString());

writer.Close();

أنه يعمل بشكل جيد في ويندوز XP ولكن على إنتاج خادم ويندوز 2003 يظهر استثناء

النظام.IO.IsolatedStorage.إيسولاتيدستوراجيكسسيبشن:غير قادر على إنشاء مخزن الدليل.

لدي الجميع أذونات "التحكم الكامل" في بلدي asp.net مجلد المشروع.الاهتمام CSoft.الأساسية هو الشخصية إطار إنشاؤه من قبل لي.

هذا هو بلدي تتبع المكدس:

[إيسولاتيدستوراجيكسسيبشن:غير قادر على إنشاء مخزن الدليل.(استثناء من HRESULT:0x80131468)]
النظام.IO.IsolatedStorage.IsolatedStorageFile.nGetRootDir(IsolatedStorageScope نطاق) +0
النظام.IO.IsolatedStorage.IsolatedStorageFile.InitGlobalsNonRoamingUser(IsolatedStorageScope نطاق) +97
النظام.IO.IsolatedStorage.IsolatedStorageFile.GetRootDir(IsolatedStorageScope نطاق) +137
النظام.IO.IsolatedStorage.IsolatedStorageFile.GetGlobalFileIOPerm(IsolatedStorageScope نطاق) +213
النظام.IO.IsolatedStorage.IsolatedStorageFile.الحرف الأول(IsolatedStorageScope نطاق) +56
النظام.IO.IsolatedStorage.IsolatedStorageFile.GetStore(IsolatedStorageScope نطاق نوع domainEvidenceType اكتب assemblyEvidenceType) +59
CSoft.الأساسية.IO.StorageHelper.حفظ(سلسلة اسم الملف سلسلة المحتوى) في c:\Projectos\FrameworkCS\CSoft.الرئيسية\IO\StorageHelper.cs:18
CSoft.ويب.واجهة المستخدم.ViewStateHelper.SerializeViewState(HttpContext السياق ، وجوه الدولة) في c:\Projectos\FrameworkCS\CSoft.ويب.ضوابط\Web\UI\ViewStateHelper.cs:65 CSoft.ويب.واجهة المستخدم.الصفحة.SavePageStateToPersistenceMedium(كائن الدولة) في c:\Projectos\FrameworkCS\CSoft.ويب.ضوابط\Web\UI\صفحة.cs:302
النظام.ويب.واجهة المستخدم.الصفحة.SaveAllState() +236
النظام.ويب.واجهة المستخدم.الصفحة.ProcessRequestMain(منطقية includeStagesBeforeAsyncPoint, منطقية includeStagesAfterAsyncPoint) +1099

هل كانت مفيدة؟

المحلول 3

ولقد غيرت ملف IsolatedStorage إلى

وباستخدام (IsolatedStorageFile isoStore = IsolatedStorageFile.GetMachineStoreForAssembly ())             {}

وهذا العمل.

نصائح أخرى

أعرف أن هذا المستخدم حل المشكلة بالفعل ، ولكن بالنسبة للآخرين تبحث عن إجابة.هذه الوظيفة ليست مثالية, ولكن سوف نقطة لك ما تحتاج إلى حل هذه المشكلة.

مع asp.net GetMachineStoreForAssembly يبدو أن العمل في معظم الحالات ، وربما الوضع المطلوب عند استخدام التخزين المعزول من التطبيق على شبكة الإنترنت.لأنه حتى إذا كنت تستخدم GetUserStoreForAssembly ، وسوف تكون معزولة عن طريق حساب المستخدم في تشغيل asp.net التطبيق وسوف يكون دائما هو نفسه لكل مستخدم الموقع إلا إذا كنت على نحو ما رسم كل تسجيل الدخول إلى windows المستخدم(و إذا كنت تفعل هذا ثم سيكون العامل).

المشكلة هي ثم يمكنك محاولة استخدام GetUserStoreForAssembly لأنه يحتاج المستخدم مع حقوق التخزين المعزول ، الافتراضي IIS المستخدم للتطبيقات لا تحصل على حقوق لهذا أعتقد.

هناك 2 حلول:

  1. استخدام GetMachineStoreForAssembly

  2. إذا كان يجب استخدام GetUserStoreForAssembly تعيين التطبيق لتشغيل المستخدم مع الحقوق.هذا ليس حلها عن طريق أذونات المجلد.هناك عدة طرق للحصول على الأمن الإعداد.(IIS7) يمكنك تعيين التطبيق المسبح أو في إطار الأساسية إعدادات > الاتصال أو تحت Authenication > مجهول Authenication.أنا لست متأكدا بالضبط ما هي الحقوق التي يحتاج المستخدم, ولكن هذا سوف تحصل على الذهاب في الاتجاه الصحيح.

هنا بعض كود المكافأة مما قد تساعدك على معرفة مشكلتك:

   Dim storageFile As IsolatedStorageFile
    If Request("storage") = "user" Then
        storageFile = IsolatedStorageFile.GetUserStoreForAssembly()
    Else
        storageFile = IsolatedStorageFile.GetMachineStoreForAssembly()
    End If

    Response.Write(storageFile.GetType.GetField("m_RootDir", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance).GetValue(storageFile).ToString())

GetUserStoreForAssembly هنا:C:\Documents and Settings\غايب\إعدادات المحلية\بيانات التطبيق\IsolatedStorage\

GetMachineStoreForAssembly هنا:C:\Documents and Settings\All Users\Application Data\IsolatedStorage\

إذا انها تعمل على IIS وتجمع تطبيقات الهوية NETWORKSERVICE، يمكنك محاولة الانتقال إلى الإعدادات المتقدمة من تجمع التطبيقات وحدد "تحميل تعريف المستخدم" القيمة إلى "الحقيقية". عملت بالنسبة لي.

وكيف حالك تشغيل هذا على الخادم؟ إذا كنت تقوم بتشغيل كخدمة على الخادم، قد يكون لديك مشكلة مع المستخدم المخصصة لتشغيل الخدمة. تأكد من اختبار مع نفس المستخدم الذي تستخدمه على خادم الإنتاج.

جون سوندرز يسأل في تعليق له, الرجاء نشر المزيد من تتبع المكدس ، بما في ذلك إذا كان ذلك ممكنا خطوط رمي expception.

ومع ذلك ، باستخدام بعض نفسية التصحيح المهارات, انا ذاهب الى اتخاذ بضع البرية طعنات هنا التي قد تساعد:

  1. إيسولاتيدستوراجيكسسيبشن يمكن طرح من قبل كل من GetStore و IsolatedStorageFileStream منشئ
  2. "أنه يعمل بشكل جيد في ويندوز إكس بي" - عند تشغيل الموقع في Visual Studio المدمج في خادم الويب التي تعمل تحت الخاص بك (ربما المشرف) تفويض, ولكن بالتأكيد كمستخدم مع الشخصية ، وبالتالي معزولة مجلد التخزين.
  3. "ولكن على إنتاج فإنه يلقي استثناء" - عند تشغيل سواء في إطار "خدمة الشبكة" أو بعض الحسابات الأخرى التي لا الشخصي ، أو التفاعل مع سطح المكتب نوع الحقوق (غير متأكد من تفاصيل إنها أساسا عدم وجود الشخصية التي قاتل).

ما نوع الحساب هو موقع يعمل تحت في الصنارة?أفترض أنه لم يكن المستخدم قادرا على تسجيل الدخول إلى الملقم والتفاعل مع نظام الملفات بشكل صحيح ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top