Настройка прав доступа пользователя в Windows - PullRequest
1 голос
/ 12 апреля 2010

Может кто-нибудь сказать мне, как установить права доступа к файлам в Delphi 2006? Я использую TINIFile.Create для создания файлов INI в моем приложении. Проблема заключается в том, что если я создаю файл во время входа в Windows как администратор, а затем пытаюсь запустить приложение от имени обычного пользователя и перезаписать файл INI, у меня нет разрешения на это. Я помещаю файл в папку AllUsers \ ApplicationData \ MyProduct. Я хотел бы установить разрешения для этой папки. Мне нужно, чтобы у AllUsers были полные права доступа к папке MyProduct. Если это возможно сделать через WindowsAPI, это было бы здорово, потому что мне также нужно делать это на C ++ и C #. Буду очень признателен за любую помощь. Спасибо! * * 1001

Ответы [ 5 ]

3 голосов
/ 12 апреля 2010

Правильный ответ на вопрос «как это сделать» - «вообще не делай этого».

Если вы установите «разрешить кому-либо писать» для своей папки MyProduct или ini-файла - это нарушит безопасность. Потому что теперь любой пользователь может влиять на других пользователей - это не то, что им разрешено делать.

Любой пользователь должен влиять только на свой мир . Он не должен влиять на миры других пользователей. Это право зарезервировано для администраторов.

Почему это плохо? Obsiosly .

Вот почему правильный путь будет ок. как это:

  1. Установщик вашего приложения МОЖЕТ поместить ini-файл в папку AllUsers, но НЕ изменять права доступа к файлу. Этот файл будет использоваться по умолчанию только для чтения.
  2. Ваше приложение должно считывать настройки из папки AllUsers и из текущей пользовательской папки. Если нужно сохранить настройки - он должен писать в папку пользователя, а не в AllUsers. Таким образом, у каждого пользователя будут свои предпочтения / настройки.
  3. Если вы хотите, чтобы «кто-то могущественный» имел возможность применять настройки для всех пользователей - он должен быть администратором. Он может редактировать файл в AllUsers, что влияет на настройки всех пользователей.

Обратите внимание, что вам также необходимо решить, какие настройки имеют более высокий приоритет (глобальный или локальный). Таким образом, вы можете иметь одновременно и: (a) локальные настройки для каждого пользователя и (b) возможность принудительно / отменять настройки пользователя.

3 голосов
/ 12 апреля 2010

Хотя вы можете делать все виды изменений разрешений с помощью правильного кода в Delphi (как администратор), лучшая структура приложения - НЕ предполагать, что ваше приложение имеет какие-либо привилегии (вы говорите, что хотите, чтобы оно работало в пользовательском режиме).Вместо этого используйте установщик, который установит ваше приложение (например, Inno Setup), чтобы скопировать подходящий шаблон файла Ini в нужную папку с данными.Вы можете указать необходимые разрешения, используя «Permissions: user-modify» в строке копирования файла.

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

Для этого вы можете использовать библиотеку JEDI . Вот блог " Настройка защиты файлов с помощью JWSCL " от Кристиана Виммера

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

Скорее всего, вы создаете свой INI-файл в папке приложения, не так ли? Вам следует избегать такой практики. Вместо этого создайте ini-файлы в users \ YourUser \ AppData \ Roaming \ YourProduct.

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

У меня похожая проблема.

Поскольку вам нужно сделать это и в других средах, у меня есть для вас предложение.

Используйте внешний установщик для установки вашего приложения. Он имеет много преимуществ, и одно из них заключается в том, что он будет настраивать для вас разрешения File \ Directory \ Registry во время установки. Конечно, вам придется запустить установку с правами администратора, но тогда ваши пользователи получат разрешения, необходимые для вашего приложения.

Я могу порекомендовать вам отличный установщик, который называется Inno Setup .

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