Light-electric.com

IT Журнал
6 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

System unauthorizedaccessexception c

System.UnauthorizedAccessException при создании файла

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

Я нашел форум, который обсуждал подобную проблему, но с помощью File.SetAttrributes(filePath, FileAttributes.Normal) не помог и RemoveReadOnlyAccess (включенный в код выше). Когда я проверяю свойства папки, она помечена только для чтения, но даже когда я ставлю галочку, она возвращается снова. Я проверил разрешения на папку и кроме специального разрешения, которое я не смог изменить, все разрешено. Любое предложение о том, как мне следует действовать, будет воспринято с благодарностью. Почему доступ к пути запрещен? по ссылке обсуждается похожая проблема, но я не смог заставить свою вещь работать с предложениями, перечисленными там.

Спасибо, что нашли время взглянуть на это.

3 Ответа

Ваш путь странен : «My documents» каталог должен быть «C:UsersMyNameDocuments»

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

Обратите внимание, что он будет иметь доступ к папке «My documents» пользователя, который запускает ваш exe.

Вторая ошибка, CreateDirectory должен иметь путь в аргументе, а не файл. используя как вы делаете, вы создадите подкаталог с именем файла. Поэтому вы не можете создать файл с таким именем !

Некоторые возможные причины:

  • ваше приложение не работает под учетной записью, которой разрешен доступ к этому пути/файлу
  • файл блокируется для записи (или, возможно, чтения тоже) каким-то другим процессом

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

Другая ситуация может быть решена путем проверки, если какой-либо другой процесс блокирует файл (например, используйте инструменты, такие как ‘WhosLocking’ или ‘ProcessExplorer’

Я должен был запустить свое приложение как администратор, чтобы писать в защищенные папки в c:. Например, при отладке приложения в visual studio обязательно щелкните правой кнопкой мыши на «C:Program Files (x86)Microsoft Visual Studio 12.0Common7IDEdevenv.exe» и выберите «Run As Administrator». Затем откройте свое решение оттуда. Мое приложение пыталось написать в корень c:

Похожие вопросы:

Я использую Windows.Web.Administration dll в программе C# для управления IIS 7 (я использую только метод Recycle ). Первая проблема была: System.UnauthorizedAccessException: Filename.

Я создаю файл из строки base64, и при создании файла я получаю system.unauthorizedaccessexception, если строка base64 является типом изображения, и она отлично работает в остальных типах файлов.

Я следую инструкциям, приведенным в этой ссылке . Но я получаю System.UnauthorizedAccessException при чтении файла (текстовый файл);. Я попробовал следующее решение, но не преуспел. StorageFile file.

Я пытаюсь прочитать файл закладок chrome в приложении windows 8. Проблема в том, что я получаю исключение System.UnauthorizedAccessException. Поэтому в основном вам нужно зарегистрировать ассоциацию.

В ASP.NET (hosted) мне нужна простая операция file IO для считывания данных из файла,а затем принудительная загрузка. Это действительно так просто. Я продолжаю получать.

Я пытаюсь загрузить некоторые файлы на Google Диск через мою программу C#. Я использую stream для работы с функцией Google Drive API для загрузки файла. Но у меня есть исключение под названием.

Я получаю эту ошибку каждый раз, когда я пытаюсь загрузить файл в моем приложении ASP.NET MVC. Может кто-нибудь мне помочь. Ошибка, вызванная является System.UnauthorizedAccessException Доступ к.

я получаю следующую ошибку при создании файла excel System.UnauthorizedAccessException: Получение фабрики классов COM для компонент с CLSID <00024500-0000-0000-C000-000000000046>сбой из-за.

Я работаю над приложением Метро Windows 8.1 XAML/C#. В настоящее время я получаю ошибку авторизации при попытке сохранить документ XML. Вот метод, который при запуске бросает: public async void.

ASP.NET: система.UnauthorizedAccessException — доступ к пути запрещен

У меня есть ASP.NET веб-приложение, которое делает следующее:

  1. читает файл Excel.
  2. файл excel будет иметь URL-адрес изображения, расположенный в нем, что указывает на где-то в интернете.
  3. программа считывает каждый URL-адрес изображения и сохранить его во временную папку на веб-сервере.
  4. затем приложение изменяет размер (изменяет ширину и высоту) изображения.

наконец, приложение сохранит это изображение в другая папка.

Я получаю следующее исключение:

Система.Сеть.WebException: исключение произошло во время запроса WebClient. —> Система.UnauthorizedAccessException: Доступ к пути ‘abcservertarget03311135644www.testing.comwebcontentimagesTempStoragetempImage.jpg’ лишенный. на Системы.ИО.__Ошибка.WinIOError(Типа Int32 errorCode, строка maybeFullPath) в Системы.ИО.Типа FileStream.Метод init(string путь, Режим FileMode, доступ к FileAccess, Типа int32 прав, логическое useRights, Общий доступ к файлам, int32 bufferSize, Параметры FileOptions, SECURITY_ATTRIBUTES secAttrs, строка msgPath, Boolean bFromProxy) at Система.ИО.FileStream..ctor (строка путь, режим filemode необходимо флагами fileaccess доступа) Системы.Чистая.Вебклиент.Downloadfile Следует(Ури адрес, строковое имя файла) — — — End внутренней трассировки стека исключений — — —
в ProcessImage.GetFileFromUrl (Строка imageFileUrl, строка newFileName)
на uploadexceldata.UploadExcelData (Строка fileName)

есть ли у кого-нибудь предложения о том, как исправить это исключение?

10 ответов

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

никакие ответы в мире не решили это для меня, пока я не наткнулся на ответ для себя:

UN-ШИФРОВАТЬ ФАЙЛ

вы можете предоставить полные разрешения всем на весь жесткий диск, он все равно не позволит ASP.NET расшифровать файлы.

Если вы уверены, что файл не зашифрован, вам просто нужно добавить учетную запись ASPNET в файл или папку, к которой вы хотите получить доступ. Но сначала убедитесь, что он не зашифрован!

в ответ на то, что было сказано : «это удаленный сервер, и папка имеет полное разрешение на чтение/запись.Все еще не работает»

убедитесь, что пользователь учетной записи .Net / компьютера имеет полные разрешения для этой папки.

кроме того, добавьте в файл конфигурации

убедитесь, что ASP.NET учетная запись имеет разрешение на чтение/запись в папке, в которую вы пишете (базовая безопасность windows).
Как: http://www.microsoft.com/windowsxp/using/networking/security/permissions.mspx
(первые 4 шага, установите флажки и нажмите кнопку OK )

[EDIT]
Вам необходимо пройти аутентификацию с учетной записью, известной на удаленном сервере. Вы, наверное, дали права местным ASP.NET учетная запись на удаленном сервере, которая не будет работать потому что это не пользователь, с которым вы получаете доступ к папке (с веб-сервера).
[/EDIT]

все вышеперечисленное, плюс вам может потребоваться добавить этот тег:

читать это KB статья и если вы собираетесь из браузера в iis в общий файловый ресурс, это считается двумя прыжками, и теперь вам нужно настроить делегирование Kerberos. Системные администраторы намного умнее меня пытались настроить делегация kerberos так и не удалось. Переместите изображения или экземпляр IIS так, чтобы они находились на одном компьютере.

во-первых, сузьте свою проблему, временно предоставив всем полное разрешение на этот конкретный путь. Если это работает, то вы знаете, что это простая проблема с разрешением, и вам просто нужно выяснить, какой acct нуждается в правильном разрешении. Вероятно, анонимная учетная запись Пользователя (дважды проверьте этот параметр в IIS Admin), а не ASP.NET счет. (не забудьте вытащить разрешение для всех)

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

одна последняя вещь. установлен ли в файле флаг только для чтения? 🙂

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

попробуйте сделать следующее для рассматриваемой папки:

  1. Правой Кнопкой Мыши на папке и выберите Свойства
  2. нажмите на вкладку общий доступ, а затем нажмите на кнопку разрешения
  3. убедитесь, что добавить все, что пользователь собирается писать в папку разрешения для этого
  4. назад на странице свойств щелкните вкладку Безопасность
  5. убедитесь, что добавить все, что пользователь собирается написать в папку разрешения для этого

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

убедитесь, что файл изображения (jpg), который вы пишете в tempStorage, имеет соответствующие разрешения для учетной записи webuser(aspnet или iis_wpg). Вы можете установить каталог TempStorage для замены записей permisson для всех дочерних объектов.

  1. щелкните правой кнопкой мыши папку TempStorage и выберите Свойства
  2. выберите вкладку Безопасность (убедитесь, что правильные разрешения на чтение/запись/изменение здесь)
  3. Нажмите кнопку Дополнительно
  4. проверить второй флажок заменить разрешения записи на всех дочерних объектов заданными здесь, применимыми к дочерним объектам.

теперь все файлы, которые вы добавляете в папку TempStoreage, наследуют разрешения, позволяющие учетной записи webuser читать файл jpg.

вместо предоставления разрешений пользователю ASPNET предоставьте разрешения пользователю сетевой службы. Изменить разрешения в папке должно быть достаточно, нет необходимости давать полные разрешения (нет причин давать больше разрешений, чем необходимо)

ошибка довольно очевидна там доступ к пути ‘ binmyprojname.pdb ‘ отказано. пользователь, под которым выполняется процесс веб-консоли (не пользователь, созданный в webconsole, фактический пользователь windows), скорее всего, «сетевая служба» не имеет разрешений на эту папку.

вы можете либо-щелкните правой кнопкой мыши на этой папке, goto разрешения и добавить пользователя «Network Service» — щелкните правой кнопкой мыши на этой папке, goto разрешения и добавить пользователя «все»

System.UnauthorizedAccessException при запуске.exe под программными файлами

0 kumars [2018-05-29 18:05:00]

Через установщик WiX я установил приложение для Windows, и папка создается в папке c:ProgramFiles с.exe и требуемой dll.

Во время запуска.exe я получаю System.UnauthorizedAccessException .

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

Пожалуйста, найдите приведенный ниже журнал событий для справки.

c# windows windows-installer wix

3 ответа

Не пытайтесь писать, где приложения не должны писать. Используйте другие папки, например, например:

Если нет альтернативы, с которой я серьезно сомневаюсь, запустите исполняемый файл с правами администратора.

причина

Это похоже на простое нарушение прав доступа — вы пытаетесь получить доступ на запись к файлу, для которого у вас нет прав, — в контексте, в котором вы работаете (файлы в %ProgramFiles% не могут быть записаны для обычных пользователей или администраторов, не имеющих повышенного уровня — запрет виртуализации файлов, см. раздел 9 ниже).

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

Предлагаемые возможные исправления

Ниже приведен список нескольких возможных подходов, которые можно использовать для решения проблемы, устранения причины проблемы или перепроектирования, что позволяет избежать проблемы. И есть несколько подходов, которые просто возможны и редко используются.

Ниже приведен список не в порядке предпочтения. На самом деле подход номер 1 очень нежелателен, на мой взгляд. Подход 6 может быть эффективным, но не настолько большим (конечно, лучше, чем 1 ). Я могу жить с другими подходами (кроме 9 ), а 2 , вероятно, наиболее распространен в использовании.

1. Поднимите приложение (права администратора): поскольку другие предложили вам запустить приложение с правами администратора (очень плохая практика в наши дни — права администратора распространяются, ключи от города и делают ваше приложение хакерской целью, а также приложение более опасно, если оно содержит ошибки калибров). Ниже приведено краткое руководство: как заставить приложение.NET запускаться как администратор? ,

  • Только для пользователей-администраторов: важно, что для обычных пользователей высота не будет работать! (им будет предложено ввести пароль администратора). Только администраторы могут подняться !
  • Пустой пароль администратора: если на коробке есть пустой пароль администратора (обычный на домашних ПК), любой пользователь может поднять любой бинарный набор, чтобы поднять его до прав администратора (используя учетную запись пустого пароля) — во время входа в свою собственную ограниченную учетную запись (они, очевидно, также могут войти в систему как администратор с пустой учетной записью пароля и запустить абсолютно что угодно — так что дыра в безопасности уже существует с пустым паролем, независимо от проблем с возвышением, но зачем допускать возвышение с учетными записями пароля?).
  • UAC: Что происходит, когда UAC отключен? Стандартные пользователи, вероятно, просто не запрашивают пароль, и запуск не удается? У меня еще не было возможности попробовать.
  • Безопасность. В определенных сценариях повышенные процессы, по-видимому, могут запускать другие повышенные процессы, которые могут пережить исходный процесс (в зависимости от запуска пользовательских привилегий пользователя). Безумие.

2. Профиль пользователя (перемещение файла): вы можете определить, какой файл вызывает нарушение прав доступа (какой-то файл настроек?) И переместить его в место, где пользователи имеют обычные права доступа во всех случаях. Обычно где-то в профиле пользователя (рекомендуется).

3. Доступ только для чтения. Очень часто вы можете уйти с доступом только для чтения для файлов настроек. Возможно, вы можете применить этот подход вместо этого? Все зависит от дизайна вашего приложения. Возможно, вы можете handle the access denied exception а затем запустить только чтение?

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

5. Настройки Интернета? : Некоторым людям нравится вообще удалять файлы настроек (или делать их доступными только для чтения), а затем извлекать «реальные настройки» из базы данных при запуске. Такой подход может иметь значительные преимущества — особенно для корпоративных приложений — управление настройками и версиями, устранение проблем с роумингом профиля пользователя и т.д. (И, конечно же, проблемы — network issues , firewall , proxy и etc. ).

6. ACL Permissioning: вы можете применить разрешения ACL к соответствующему файлу при установке, чтобы обычные пользователи могли писать на него. Не большой дизайн, но он будет работать. И, конечно, лучше, чем работать с правами администратора (повышен) — потому что вы указываете необходимый доступ и не просто поднимаете весь процесс. Не просто установить полный доступ ко всей папке — только открыть доступ для записи для отдельных файлов.

  • WiX Permission Sample : есть сегмент с информацией о разрешении ACL здесь: Как запретить доступ к папке Пользователям с установщиком wix.
  • WiX Permission Elements : И вот еще один сегмент — средняя страница — (разные способы применения разрешения в WiX): изменяет ли WiX разрешения на мой файл Notes.ini?
  • WiX Permission Documentation : И фактическая документация WiX находится здесь: http://wixtoolset.org/documentation/manual/v3/ (поиск «разрешения» — рекомендуйте ссылку в предыдущей маркерной точке, чтобы понять различия между различными элементами).

7. Служба Windows. В некоторых случаях можно запускать части приложения, для которых требуются повышенные права в качестве службы Windows. Не тот подход, который я видел очень часто, но возможно. Затем вы устанавливаете службу для запуска в качестве LocalSystem или эквивалентной, повышенной учетной записи (или используя учетные записи службы — см. Раздел «Другие подходы» — или этот альтернативный ответ). Возможно, я могу упомянуть и о scheduled task — я никогда не пытался использовать запланированную задачу для такого сценария.

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

9. Подходы к виртуализации: просто упомянуть об этом. Различные формы виртуализации — например, политики, которые вы можете разрешить для перенаправления файлов и реестров записи в место для записи (больше по направлениям перенаправления данных — со всей путаницей, которая возникает — это не решение), на самом деле Microsoft намеревается для удаления этой функции в будущей версии Windows. Не уверены в состоянии в Windows 10. MSDN для виртуализации реестра). Как правило, проблемы не решаются, но некоторые проблемы не распознаются. В целом вызывают недоумение, поскольку люди не видят, где записываются данные, а данные не распространяются среди пользователей, но зависят от пользователя. И есть полная виртуализация/потоковая передача данных, такая как App-V и контейнеры, которые обеспечивают полный доступ. Не моя специальность, а не мое предпочтение.

Ниже приведен ответ, отвечая на вопрос о развертывании файлов для каждого пользователя и о том, как это можно сделать в пакете, а также некоторые альтернативные подходы к сети/базе данных/облакам.

Это может быть задействованное чтение, но здесь оно — это, по сути, обеспечивает еще несколько перестановок вышеупомянутых возможностей:

System unauthorizedaccessexception c

I just finished my application — it works properly when im trying to open it on different computer im suffering this problem (after opening the exe file):


System.UnauthorizedAccessException: Access to file is denied
‘C:Program FilesBBO Generatordatabase.dat’.
in System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
in 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)

the program works with several files, based on StreamWriter/Reader (Writer and Reader are declared in different method of my class):

I looked thru my .NET book, from which i’m learning atm and found something about defining permissions. Maybe thats the key to the problem.

I haven’t tried it out yet, but is it any difference between code above and this: (?)

I searched for it in google, found some issues concerning that exception above, but none from them were related with mine, i think.

Anyone got some ideas for me?
thx in advance,
JK

that happend on VISTA, to be honest i have no idea about its security managment (im xp fan).
anyway, what about FileAttributes Method (System::IO::File) ?

Maybe this will solve it once and for all ? (pity i can’t test it 🙂

The question is if i assign attributes manualy to my files(arent they read/write available by default?) will it change anything if the folder (here program files, lets us be stubborn) is set to read only.

As I understand it (more so with Vista), the files in ‘Program Files’ are not writable by non-administrative programs. UAC will even block a program run by an administrator from writing into the files.

Here are a number of possible solutions:

Probably the best would be to store your data files in a non-restricted folder, something like the users profile folder, or maybe the CommonApplicationData* folder.

Use ‘Run as administrator’ to run the program with administrative rights. This would be a good test to see if it is a rights issue.

Finally (worse) would be to change the security on the folder to give your user account write permissions.

———————————
*CommonApplicationData: A system special folders that serves as a common repository for application-specific data that is used by all users. Use Environment::GetFolderPath () to obtain the path.

Console::WriteLine( «GetFolderPath: <0>» , Environment::GetFolderPath( Environment::SpecialFolder:: CommonApplicationData ) );

Доступ к пути запрещен

Я знаю этот вопрос задавали много раз здесь, но я не могу найти решение моей проблемы. Я пытаюсь сохранить изображение в папку в .net c#, но получаю это исключение:

Я дал полный контроль над этой папкой (savehere) в network service и iis_iusrs , даже дал полный контроль над everyone но все равно получаю это исключение. Я попытался дать доступ через проводник и через диспетчер IIS, все равно не повезло

Я делаю это на Windows server 2008 R2 и IIS 7.5, кто мне нужен чтобы дать доступ?

18 ответов:

вам нужно узнать из пула приложений для веб-сайта, под каким идентификатором он работает (по умолчанию это Application Pool Identity ) и предоставить соответствующие разрешения.

доступ к пути ‘C:inetpubwwwrootmysiteimagessavehere-отказано

внимательно прочитайте сообщение. Вы пытаетесь сохранить в файл, который имеет то же имя, что и каталог. Это не может работать, вы не можете перезаписать каталог, заполненный файлами, одним новым файлом. Это приведет к недиагностируемой потере данных, «доступ к пути запрещен» — это файловая система, которая борется, чтобы предотвратить это.

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

вы должны использовать имя, как ‘C:inetpubwwwrootmysiteimagessaveheremumble.jpg’. Рассмотрим путь.Объединить() надежно генерировать имя пути.

у меня была такая же проблема при попытке создать файл на сервере (собственно файл, который является копией шаблона).

вот полное сообщение об ошибке:

Я добавил новую папку под названием Templates внутри папки приложения IIS. Одна очень важная вещь в моем случае заключается в том, что мне нужно было дать разрешение на запись (Gravar) для пользователя IUSR в этой папке. Вы также можете дать Network Service и ASP.NET v$.# то же самое написать разрешение.

после этого все работает как и ожидалось.

У меня была точно такая же проблема.

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

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

Код

Код

какой идентификатор является вашим пулом приложений для веб-приложения, работающего как, чтобы устранить неполадки, попробуйте создать новый пул приложений с say Network Service в качестве его идентификатора и заставить ваше веб-приложение использовать этот новый пул приложений, который вы создали, и посмотреть, сохраняется ли ошибка.

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

Я пытался получить ASP.Net FileUpload управления для загрузки это файл на сетевой адрес, который содержал «скрытая доля«, а именно:

MyNetworkServerc$SomeDirectoryOrOther

я этого не понял. Если Я запустил веб-страницу в режиме отладки в Visual Studio, он будет работать нормально. Но когда проект был развернут и работает через пользователя пула приложений, он отказался найти этот сетевой каталог.

Я проверил, под каким пользователем работает мой сайт IIS, дал этому пользователю полные разрешения на этот каталог на «MyNetworkServer» сервер и т. д., Но ничего не получалось.

причина (конечно!) заключается в том, что только администраторы могут «видеть» эти скрытые привод акций.

мое решение было просто создать «нормальную» долю

MyNetworkServerSomeDirectoryOrOther

и это избавило от «доступа к пути». отказано » ошибка. FileUpload удалось успешно выполнить команду

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

Читать еще:  Запись в access
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×