ASP.NET - я создаю файл .XLS с DLL, как я могу предоставить разрешения на запись в файл? (IIS 7) - PullRequest
0 голосов
/ 29 апреля 2010

Я создаю файл .XLS с помощью DLL (Библиотека Excel http://code.google.com/p/excellibrary/)

Я добавил эту DLL в качестве ссылки на мой проект.

Код для сохранения .XLS на диск запущен, но возникла проблема с разрешениями.

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

Вот где я пытаюсь записать файл:

c:/temp/test1.xls

Вот ошибка:

[SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
   System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0
   System.Security.CodeAccessPermission.Demand() +54
   System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) +2103
   System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) +138
   System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) +89
   System.IO.File.Open(String path, FileMode mode, FileAccess access, FileShare share) +58
   ExcelLibrary.Office.CompoundDocumentFormat.CompoundDocument.Create(String file) +88
   ExcelLibrary.Office.Excel.Workbook.Save(String file) +73
   CHC_Reports.LitAnalysis.CreateSpreadSheet_Click(Object sender, EventArgs e) in C:\Users\brian\Desktop\Enterprise Manager\CHC_Reports\LitAnalysis.aspx.vb:19
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +115
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +140
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +29
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +11041511
   System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +11041050
   System.Web.UI.Page.ProcessRequest() +91
   System.Web.UI.Page.ProcessRequest(HttpContext context) +240
   ASP.litanalysis_aspx.ProcessRequest(HttpContext context) +52
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +599
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171

Есть идеи, что мне нужно сделать, чтобы диагностировать проблему с разрешениями и разрешить создание файла?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 30 апреля 2010

Я думаю, что это связано не с безопасностью файлов, а с безопасностью доступа к коду .NET. Вы можете установить .NET SDK, который добавит что-то вроде «.NET 2.0 Configuration» в Администрирование, где вы можете настроить его, или использовать утилиту командной строки caspol. Кроме того, проверьте эту статью специально для ASP.NET: http://msdn.microsoft.com/en-us/library/ms998326.aspx

Редактировать: Теперь, когда я выгляжу немного больше, обратите внимание CodeAccessSecurity Engine. Это определенно похоже на то, что я думал. Вы предоставляете или запрещаете определенные разрешения для приложений .NET на основе URI, строгого имени и т. Д. Эти разрешения включают доступ к файлам, реестру и т. Д.

1 голос
/ 30 апреля 2010

При записи файла на жесткий диск из IIS вам необходимо установить разрешения на «запись» для папки (например, c: \ temp). Это связано с тем, что некоторые процессы ввода-вывода удаляют, а затем воссоздают файл (вместо простого обновления), и разрешения удаляются при удалении файла. Обычно вам необходимо предоставить права на чтение / запись для IUSR *, IWAM * и ASPNET.

0 голосов
/ 30 апреля 2010

Я считаю, что Нельсон был на правильном пути для 90% людей, столкнувшихся с этой ошибкой ... и я считаю, что tgolisch был на правильном пути примерно для 8% от оставшихся.

Однако пул приложений, который обслуживал мое приложение, по-видимому, не имел особых прав для записи в соответствующие папки. Поэтому я переключил пул приложений, используемый для обслуживания приложения, в контексте: Локальная система.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...