我有一個很大的web應用程序。這個Web應用程序的一小部分使用OpenXML庫(用C#編寫)生成XLSX文件。OpenXML,IsolatedStorage,NETWORK SERVICE和Windows Server 2008
我碰到的這個帖子描述的問題:IsolatedStorage Access Denied
然而,說明也有適用於Windows Server 2003,並在2008年用戶目錄層次結構是不同的。
我試圖在這些位置創建IsolatedStorage目錄(然後給NETWORK SERVICE權限的話):
C:\用戶\ DEFAULT \應用程序數據\本地\ IsolatedStorage C:\用戶\ DEFAULT \ AppData \ Roaming \ IsolatedStorage
那些沒有工作。我試圖找到適用於IsolatedStorage目錄的位置在Windows Server 2008上(通常使用Google,特別是在這裏),但沒有成功。
誰能告訴我,我應該創建一個目錄(或者,提出了一些其他的解決辦法,這將迫使OpenXML可以歸檔庫指示不使用IsolatedStorage創建電子表格)?
編輯 - 2011年7月14日 - 添加異常消息和堆棧跟蹤,因此希望能幫助別人找到。
Exception: System.ApplicationException
Message: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
Source: mscorlib
at System.IO.IsolatedStorage.IsolatedStorageFile.nGetRootDir(IsolatedStorageScope scope)
at System.IO.IsolatedStorage.IsolatedStorageFile.InitGlobalsNonRoamingUser(IsolatedStorageScope scope)
at System.IO.IsolatedStorage.IsolatedStorageFile.GetRootDir(IsolatedStorageScope scope)
at System.IO.IsolatedStorage.IsolatedStorageFile.GetGlobalFileIOPerm(IsolatedStorageScope scope)
at System.IO.IsolatedStorage.IsolatedStorageFile.Init(IsolatedStorageScope scope)
at System.IO.IsolatedStorage.IsolatedStorageFile.GetStore(IsolatedStorageScope scope, Type domainEvidenceType, Type assemblyEvidenceType)
at MS.Internal.IO.Packaging.PackagingUtilities.ReliableIsolatedStorageFileFolder..ctor()
at MS.Internal.IO.Packaging.PackagingUtilities.GetDefaultIsolatedStorageFile()
at MS.Internal.IO.Packaging.PackagingUtilities.CreateUserScopedIsolatedStorageFileStreamWithRandomName(Int32 retryCount, String& fileName)
at MS.Internal.IO.Packaging.SparseMemoryStream.EnsureIsolatedStoreStream()
at MS.Internal.IO.Packaging.SparseMemoryStream.SwitchModeIfNecessary()
at MS.Internal.IO.Zip.ZipIOFileItemStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.Compression.DeflateStream.InternalWrite(Byte[] array, Int32 offset, Int32 count, Boolean isAsync)
at System.IO.Compression.DeflateStream.Write(Byte[] array, Int32 offset, Int32 count)
at MS.Internal.IO.Packaging.CompressStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at MS.Internal.IO.Zip.ProgressiveCrcCalculatingStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at MS.Internal.IO.Zip.ZipIOModeEnforcingStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at System.Xml.XmlUtf8RawTextWriter.FlushBuffer()
at System.Xml.XmlUtf8RawTextWriter.WriteAttributeTextBlock(Char* pSrc, Char* pSrcEnd)
at System.Xml.XmlUtf8RawTextWriter.WriteString(String text)
at System.Xml.XmlWellFormedWriter.WriteString(String text)
at DocumentFormat.OpenXml.OpenXmlElement.WriteAttributesTo(XmlWriter xmlWriter)
at DocumentFormat.OpenXml.OpenXmlElement.WriteTo(XmlWriter xmlWriter)
at DocumentFormat.OpenXml.OpenXmlCompositeElement.WriteContentTo(XmlWriter w)
at DocumentFormat.OpenXml.OpenXmlElement.WriteTo(XmlWriter xmlWriter)
at DocumentFormat.OpenXml.OpenXmlCompositeElement.WriteContentTo(XmlWriter w)
at DocumentFormat.OpenXml.OpenXmlElement.WriteTo(XmlWriter xmlWriter)
at DocumentFormat.OpenXml.OpenXmlCompositeElement.WriteContentTo(XmlWriter w)
at DocumentFormat.OpenXml.OpenXmlPartRootElement.WriteTo(XmlWriter xmlWriter)
at DocumentFormat.OpenXml.OpenXmlPartRootElement.SaveToPart(OpenXmlPart openXmlPart)
at DocumentFormat.OpenXml.Packaging.OpenXmlPackage.SavePartContents()
at DocumentFormat.OpenXml.Packaging.OpenXmlPackage.Dispose(Boolean disposing)
at DocumentFormat.OpenXml.Packaging.OpenXmlPackage.Close()
找到了此:http://msdn.microsoft.com/en-us/library/3ak841sy.aspx。 如果Vista的信息也適用於Windows Server 2008,則該位置應該是: C:\用戶\ DEFAULT \應用程序數據\本地\微軟\ IsolatedStorage或 C:\用戶\ DEFAULT \應用程序數據\漫遊\微軟\ IsolatedStorage。 因此,我創建了這兩個目錄,並賦予NETWORK SERVICE對它們的完全控制權,並且創建.XLSX文件仍然失敗。 –
我無法嘗試創建目錄,並在鏈接到上面的博客文章中重新創建解決方案。看起來我的選擇是讓文件變小,或者看看是否有辦法強制OpenXML以不切換到IsolatedStorage的方式實例化歸檔庫。 –
沒有找到一種方法來防止OpenXML不使用IsolatedStorage。我能夠使用ILSpy查看選擇是否使用它,但我看不到任何明顯的方式來更改它用於在MemoryStream和IsolatedStorage之間切換的highwatermark var。我確實發現NETWORK SERVICE帳戶在Win Server 2008上使用的特定配置文件 - 它是C:\ Windows \ ServiceProfiles \ NetworkService,但即使創建IsolatedStorage文件夾也沒有任何幫助。 –