5 / 5 / 4
Регистрация: 20.01.2011
Сообщений: 350
1

Отказано в доступе к файлу

18.09.2017, 14:10. Показов 3437. Ответов 7

Author24 — интернет-сервис помощи студентам
Всем привет. Сначала хотел задать вопрос в разделе Windows, но к программированию, пожалуй, ближе
Итак, у меня есть приложение, которое я разрабатываю. Приложение ставится простой распаковкой архива, после чего, при первом запуске оно уже добавляет записи в реестр и производит прочие манипуляции.
В приложении имеется dll, через которую организована работа с файлом настроек пользователя.
Само приложение является плагином для AutoCAD и также имеет отдельный exe'шник с настройками (это про него я выше написал). И приложение и плагин для AutoCAD используют dll для работы с файлом настроек.
В самом каталоге всего моего приложения есть подкаталог UserData, в котором и лежит файл настроек.

Ситуация следующая - имеется комп с Windows 8.1. Диск не разделен - только локальный диск С:/. Пользователь только один и у него написано, что он Администратор. Однако, при запуске приложения ловится ошибка "Отказано в доступе к файлу...". Приложение не может редактировать файл настроек. Если его запустить с правами администратора, то все нормально. Но в таком случае нужно и сам AutoCAD каждый раз запускать с правами администратора, иначе ловится та же самая ошибка.

Самое интересное - другие манипуляции с этим каталогом (создание там новых файлов) происходят без проблем

Как правильно поступить в данном случае? У меня есть предположение (как вариант) - перенести директорию UserData моего приложения в системную папку настроек приложений пользователя. Т.е. С:/Users/{username}/AppData/.... По идее, для записи туда не нужны права админа

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

Проверял на другой ОС (вин 10) - ошибки при редактировании этого файла не возникает, хотя программа запущена без админских прав
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2017, 14:10
Ответы с готовыми решениями:

Отказано в доступе
Перебираю папки так DirectoryInfo dirs = dinfo.GetDirectories(); if...

Отказано в доступе
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

отказано в доступе к папке
Всем доброго время суток! Сейчас работают над простеньким FTP клиентом. Возникла проблема при...

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

7
20 / 20 / 6
Регистрация: 18.07.2014
Сообщений: 73
18.09.2017, 14:32 2
значит вы администратор но урезанный как вариант мешает UAK и тут его или выключить или настроить... по мне так всё таки лучше выяснить почему это происходит нежели растаскивать настройки по машине и почему эта директория требует для работы с файлом повышенных прав
0
Администратор
Эксперт .NET
16994 / 13352 / 5211
Регистрация: 17.03.2014
Сообщений: 27,303
Записей в блоге: 1
18.09.2017, 14:54 3
Цитата Сообщение от Modis Посмотреть сообщение
Как правильно поступить в данном случае? У меня есть предположение (как вариант) - перенести директорию UserData моего приложения в системную папку настроек приложений пользователя. Т.е. С:/Users/{username}/AppData/.... По идее, для записи туда не нужны права админа
Это правильное решение

Добавлено через 3 минуты
Цитата Сообщение от Coroners Посмотреть сообщение
почему эта директория требует для работы с файлом повышенных прав
Потому что для доступа к некоторым каталогам требуются elevated права которые по умолчанию отсутствуют. Примеры таких каталогов - Program Files, Windows. Единственным правильным решением является как раз отказ от хранения изменяемых данных в этих папках и хранить их в профиле пользователя.
0
20 / 20 / 6
Регистрация: 18.07.2014
Сообщений: 73
18.09.2017, 17:25 4
OwenGlendower позвольте с вами не согласится так как elevated актуальны под учётками пользователя но не под учёткой администратора так как администратор волен делать всё что ему вздумается и немыслимо чтобы у рута просило ещё что то большего чем рут. спокойно записываю в папки Program Files, Windows под локальным админом и не испытываю ни каких трудностей (даже трудностей в AD, тем более всегда можно повысить свои привилегии а иногда это даже приходится делать), если же речь идёт о приложении которое должно работать как угодно и под чем угодно то конечно лучше перемещать в пользовательскую папку или как вариант (не особо хороший) вообще отказаться от хранения настроек в файле и хранить их в реестре в ветке доступной для пользака если данные небольшие.
0
Администратор
Эксперт .NET
16994 / 13352 / 5211
Регистрация: 17.03.2014
Сообщений: 27,303
Записей в блоге: 1
18.09.2017, 18:12 5
Цитата Сообщение от Coroners Посмотреть сообщение
elevated актуальны под учётками пользователя но не под учёткой администратора
Возможно я немного путаюсь с терминологией. При включенном UAC приложения запущенные от имени администратор работают под т.н. restricted токеном с урезаннымми привиллегиями, которые при необходимости можно получить обратно в виде elevated токена1. Именно поэтому проводник отображает дополнительный диалог с кнопкой Continue с UAC щитом при попытке копирования файлов в папку Program Files.

1. Возможно в случае с админом будет более правильно называть его unrestricted, а термин elevated оставить для случая когда не-администратор запускает приложение от имени администратора повышая таким образом привилегии. Но это не меняет сути происходящего для админов.

Вот для сравнения информация которую показывает Process Explorer для процессов запущенных под учеткой администратора в случае "обычного запуска" и запуска через "run as administrator".
Отказано в доступе к файлу
Отказано в доступе к файлу

В зависимости от того как было запушено наше приложение следующий код приведет к исключению или к успешному выполнению.
C#
1
2
3
4
5
Console.WriteLine("IsAdmin: {0}", (new WindowsPrincipal(WindowsIdentity.GetCurrent())).IsInRole(WindowsBuiltInRole.Administrator));
 
string filename = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "test123.txt");
File.WriteAllText(filename, "The Test"); // UnauthorizedAccessException если IsInRole = false
File.Delete(filename);
Цитата Сообщение от Coroners Посмотреть сообщение
администратор волен делать всё что ему вздумается и немыслимо чтобы у рута просило ещё что то большего чем рут
У него и не просят и не дают прав больше чем у него уже есть. UAC служит механизмом защиты который требует явного согласия на выполнение привилегированной операции.

Цитата Сообщение от Coroners Посмотреть сообщение
спокойно записываю в папки Program Files, Windows под локальным админом и не испытываю ни каких трудностей (даже трудностей в AD, тем более всегда можно повысить свои привилегии а иногда это даже приходится делать)
Никто и не говорил что должны быть какие-то "трудности". Речь идет только о том если UAC включен, то при выполнении некоторых операций появляется известное окно для подтверждения действия.
3
20 / 20 / 6
Регистрация: 18.07.2014
Сообщений: 73
18.09.2017, 18:31 6
OwenGlendower полностью согласен.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
18.09.2017, 19:45 7
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Возможно я немного путаюсь с терминологией. При включенном UAC приложения запущенные от имени администратор работают под т.н. restricted токеном с урезаннымми привиллегиями, которые при необходимости можно получить обратно в виде elevated токена.
В терминологии MS это называется "limited token" и "full token". А restricted token или
write-restricted token означает немного другое (там весь доступ или доступ на запись
отбирается, за исключением прав, которые назначены явно).
1
Администратор
Эксперт .NET
16994 / 13352 / 5211
Регистрация: 17.03.2014
Сообщений: 27,303
Записей в блоге: 1
18.09.2017, 19:46 8
Убежденный, спасибо за уточнение
0
18.09.2017, 19:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2017, 19:46
Помогаю со студенческими работами здесь

Отказано в доступе к разделу реестра
Здравствуйте! Пытаюсь запретить в программе использование usb-носителей, используя команду...

Найти все картинки. Отказано в доступе
По заданию нужно найти картинки на всем диске D, программа не должна требовать права админа. ...

Отказано в доступе при подключении к БД MySQL
Пытаюсь подключить БД к проекту ! Используя Мастер настройки источника Данных на этапе Добавления...

Отказано в доступе по пути
в asp.net средство администрирования веб-узла в разделе безопасность выдаёт ошибку помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru