IsolatedStorageException:无法创建存储目录(IsolatedStorageE

2019-06-24 00:29发布

您好我有储存在隔离空间中的一些隐藏信息。 对于我使用System.IO.Isolated类像

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();

它工作正常,在Windows XP,但生产服务器是Windows 2003的就可以显示异常

System.IO.IsolatedStorage.IsolatedStorageException:无法创建存储目录。

我在我的asp.net项目文件夹中的每个人都具有完全控制权限。 注意CSoft.Core是我创建的个人框架。

这是我的堆栈跟踪:

[IsolatedStorageException:无法创建存储目录。 (从HRESULT异常:0x80131468)]
System.IO.IsolatedStorage.IsolatedStorageFile.nGetRootDir(IsolatedStorageScope范围)0
System.IO.IsolatedStorage.IsolatedStorageFile.InitGlobalsNonRoamingUser(IsolatedStorageScope范围)97
System.IO.IsolatedStorage.IsolatedStorageFile.GetRootDir(IsolatedStorageScope范围)137
System.IO.IsolatedStorage.IsolatedStorageFile.GetGlobalFileIOPerm(IsolatedStorageScope范围)213
System.IO.IsolatedStorage.IsolatedStorageFile.Init(IsolatedStorageScope范围)56
System.IO.IsolatedStorage.IsolatedStorageFile.GetStore(IsolatedStorageScope范围,类型domainEvidenceType,类型assemblyEvidenceType)59
CSoft.Core.IO.StorageHelper.Save(字符串文件名,字符串的内容)在C:\ Projectos \ FrameworkCS \ CSoft.Core \ IO \ StorageHelper.cs:18
CSoft.Web.UI.ViewStateHelper.SerializeViewState(HttpContext的上下文中,对象的状态)在C:\ Projectos \ FrameworkCS \ CSoft.Web.Controls \网络\ UI \ ViewStateHelper.cs:65 CSoft.Web.UI.Page.SavePageStateToPersistenceMedium(对象状态)在C:\ Projectos \ FrameworkCS \ CSoft.Web.Controls \网络\ UI \ Page.cs:302
System.Web.UI.Page.SaveAllState()236
System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)1099

Answer 1:

我知道这个用户解决他们的问题了,但为他人寻找答案。 这个职位是不完美的,但它会指向你,你需要解决这个问题是什么。

随着asp.net GetMachineStoreForAssembly似乎在大多数情况下工作,它可能使用来自Web应用程序的独立存储时所需的模式。 因为即使你使用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和Settings \加布\本地设置\应用数据\ IsolatedStorage \

GetMachineStoreForAssembly是在这里:C:\ Documents和Settings \所有用户\应用数据\ IsolatedStorage \



Answer 2:

如果它是在IIS和应用程序池标识运行的是网络服务,您可以尝试去应用程序池的高级设置,并设置“加载用户配置文件”的值改为“真”。 为我工作。



Answer 3:

我改变IsolatedStorage文件

使用(IsolatedStorageFile isoStore = IsolatedStorageFile.GetMachineStoreForAssembly()){}

而这项工作。



Answer 4:

你是如何在服务器上运行呢? 如果你运行它的服务器上的服务,你可能与分配给运行服务的用户的一个问题。 确保你与你正在使用的生产服务器上相同的用户测试。



Answer 5:

正如约翰·桑德斯问他的意见,请发表更多的堆栈跟踪,包括如果可能的线扔expception。

然而,使用一些心理调试技能 ,我要带一对夫妇在这里的野生刺可能帮助:

  1. IsolatedStorageException可以通过两种抛出GetStore和IsolatedStorageFileStream构造
  2. “它可以在Windows XP中精” - 当您运行在Visual Studio内置在你的(可能是管理员)证书运行Web服务器的网站,但肯定与一个配置文件的用户,因此一个独立存储文件夹。
  3. “但生产它抛出一个异常” - 当它的下任“网络服务”运行,或者说没有一个配置文件,或者使用桌面型权利交互(不知道具体的一些其他账户 - 这主要是缺乏一个简介这是一个杀手)。

什么样的考虑是下脾淋巴细胞运行的网站? 我想这是不是能够登录到服务器并与文件系统正确交互用户?



文章来源: IsolatedStorageException: Unable to create the store directory