OpenXML, IsolatedStorage, NETWORK SERVICE и Windows Server 2008 - PullRequest
4 голосов
/ 13 июля 2011

У меня большое веб-приложение.Один очень маленький фрагмент этого веб-приложения генерирует файлы XLSX с использованием библиотеки OpenXML (написанной на C #).

Я столкнулся с проблемой, описанной в этом посте: Доступ к изолированному хранилищу запрещен

Однако инструкции существуют для Windows Server 2003, и иерархия пользовательских каталогов в 2008 году отличается.

Я пытался создать каталог IsolatedStorage в этих местах (а затем дать разрешения NETWORK SERVICE дляэто):

C: \ Users \ Default \ AppData \ Local \ IsolatedStorage C: \ Users \ Default \ AppData \ Roaming \ IsolatedStorage

Те не работали.Я попытался найти, где подходящее место для каталога IsolatedStorage находится в Windows Server 2008 (обычно с использованием Google и, в частности, здесь), но безуспешно.

Может кто-нибудь сказать мне, где я должен создать этот каталог (или, альтернативно,предложить другое решение, которое заставит OpenXML указать библиотеке архива не использовать IsolatedStorage для создания электронной таблицы)?

Правка - 14 июля 2011 г. - Добавление сообщения об исключении и трассировки стека, что, как мы надеемся, будетпомогите другим найти это.

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

Ответы [ 2 ]

4 голосов
/ 14 июля 2011

Во время моего исследования я также наткнулся на этот пост в блоге: http://www.kevinrohrbaugh.com/blog/tag/openxml

Сначала я отклонил его, поскольку я не могу выдать себя за другого пользователя из-за способа взаимодействия.с другим веб-приложением, которое я не могу контролировать.

Однако я подумал, что, возможно, я избавился от записи реестра для NETWORK SERVICE в ProfileList, я мог бы получить тот же результат.

Итак, я переименовал HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \ S-1-5-20 в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList \ S-1-5-20-backup иперезапустил мой экспорт в Excel, и он работает правильно.Насколько я могу судить, у меня нет никаких отрицательных результатов от этого.

0 голосов
/ 10 декабря 2012

[Я бы добавил это как комментарий, но у меня нет разрешения ...]

Надеюсь, это поможет кому-то еще ...

У меня запущено приложениев IIS Express в качестве сетевой службы на Windows Server 2008 R2.Хранилище изолированного хранилища, которое возвращается при вызове IsolatedStorageFile.GetMachineStoreForDomain (), находится по адресу: c: \ ProgramData \ IsolatedStorage

...