2013-12-13 3 views
0

Редактировать: Я нашел решение. Я думал, что ошибка возникает при попытке записать файлы, которые нужно сравнить, в действительности они генерируются, когда я пытался прочитать файл, который нужно сравнить. У меня была синтаксическая ошибка в команде, вызываемой для исполняемого файла сравнения, и это привело к тому, что файл результатов не был сгенерирован. Я видел нарушение доступа, когда пытался прочитать несуществующий файл (да, я должен был проверить наличие файла). У меня возникли проблемы с получением BC для создания сравнения (по какой-то причине одна и та же команда работает из командной строки, но не работает при запуске с C#), но я буду просить об этом в качестве отдельного вопроса, если это необходимо.System.UnauthorizedAccessException при попытке записать файл из приложения asp.net

Я работаю над .net-приложением, которое используется для сравнения изменений кода между сборками.

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

Для этого я создаю файлы из кода (обратите внимание, что я знаю, что имена файлов будут иметь проблему конфликта для нескольких пользователей, я исправлю это позже), а затем вызывая выполнение сравнения за пределами командной строки из командной строки. Я генерировать файлы, используя следующий код:

//write the code to a local disk file 
      System.IO.File.WriteAllText(@workingFolder + "\\File1.txt", (String)dataRow["OldMethodCode"]); 
      System.IO.File.WriteAllText(@workingFolder + "\\File2.txt", (String)dataRow["NewMethodCode"]); 

Значение workingFolder заключается в следующем: «C: \ Inetpub \ Wwwroot»

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

[UnauthorizedAccessException: Доступ к пути "C: \ Inetpub \ Wwwroot. отказано] System.IO .__ Error.WinIOError (Int32 ERRORCODE, String maybeFullPath) +216 System.IO.FileStream.Init (String путь, FileMode режим, FileAccess доступа, Int32 права, булевы useRights, Обменник доля, Int32 BufferSize, варианты FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) +1430 System.IO.FileStream. .ctor (String путь, режим FileMode, FileAccess доступа, Обменник доля, Int32 BufferSize, FileOptions опции, строка msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) +214
System.IO.StreamReader..ctor (String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost) +187 System.IO.File.InternalReadAllText (String path, Encodi Кодирование нг, булева checkHost) +90
_Default.gridView_SelectedIndexChanged (_sender объекта, EventArgs е) +1024 System.Web.UI.WebControls.GridView.HandleEvent (EventArgs е, булева CausesValidation, String ValidationGroup) +1241
System.Web .UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3804

Я попробовал несколько вещей, чтобы решить эту проблему.Как и с любой проблемой, вы можете потерять все ваши варианты, но вот те, которые я думал, имели самые высокие шансы на успех (но не работаю):

  • Добавить NETWORKSERVICE как полные права доступа к папке Wwwroot
  • Добавить Everyone с полными правами доступа к папке Wwwroot
  • Изменения пула приложений управляемому режим трубопровода к классическим
  • Установить приложение бассейн для запуска с настраиваемым пользователем и дать этому пользователю полных прав доступа к папке
  • ДАЙ практически любого другого пользователя, который, как представляется, связан полные привилегии в папку
  • Переместите папку в другую локальную директорию за пределами wwwroot и укажите на нее и попробуйте все вышеперечисленное с этой папкой.

Во всех случаях я не могу создать файл, тем более доступ к нему для запуска сравнения.

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

Спасибо!

+0

Вам нужно сохранить файл под C: \ inetpub \ wwwroot? Можете ли вы попробовать поместить его в подпапку? – Paritosh

+0

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

ответ

0

Хорошо, это было вызвано позже в коде. Ошибка была инициирована, когда я попытался прочитать отчет, который фактически не был сгенерирован.

У меня возникли проблемы с получением BC для создания отчета при запуске с C# (точно такая же команда работает из командной строки), но при необходимости я задам отдельный вопрос.

0

производить свою ошибку ...

создал веб-приложение и записать в файл в каталоге хоста «C: \ Inetpub \ Wwwroot \», используя следующий код

string WorkingFolder = System.Configuration.ConfigurationManager.AppSettings["FolderPath"]; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string s = "abcdefghijklmnopqrstuvwxyz"; 
     System.IO.File.WriteAllText(WorkingFolder + @"\File1.txt", s); 
    } 

я публикую и развертывание приложение в пуле приложений по умолчанию. Мой пул приложений по умолчанию использует Учетная запись пользователя домена \ IIS_IUSRS. По умолчанию я имею только чтение & Выполнение доступа к папке «C: \ inetpub \ wwwroot \». Я получил следующее сообщение об ошибке ..,

Source Error: 

Строка 14: { строка 15: строка з = "АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ"; Строка 16: System.IO.File.WriteAllText (WorkingFolder + @ "\ File1.txt", s); Line 17:} Линия 18:}

Source File: D:\Working Samples\IISCheck\IISCheck\Default.aspx.cs Line: 16 

Трассировка стека:

[UnauthorizedAccessException: Access to the path 'C:\inetpub\wwwroot\File1.txt' is denied.] 
    System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +10555843 
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) +2580 
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, Int32 bufferSize, FileOptions options) +98 
System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize) +139 
System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding) +17 
System.IO.File.WriteAllText(String path, String contents, Encoding encoding) +60IISCheck._Default.Page_Load(Object sender, EventArgs e) in D:\Working Samples\IISCheck\IISCheck\Default.aspx.cs:16 
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25 
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42 
System.Web.UI.Control.OnLoad(EventArgs e) +132 
System.Web.UI.Control.LoadRecursive() +66 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428 

Теперь я даю полное разрешение управления для IIS_IUSRS для "C: \ Inetpub \ Wwwroot" Каталог .... Он работает и может записывать файл ...

Двойное разрешение доступа к папке. Определенно можно писать .. Я использую IIS7.5

+0

Извините за задержку. Я уже предоставил полные разрешения IIS_IUSRS, к сожалению, это не сработало ... такая же ошибка. Может ли быть разница между нашими конфигурациями серверов? Я не совсем уверен, где это проверить. –

Смежные вопросы