2010-04-12 2 views
1

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

ответ

3

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

+0

+1 Точно. Всегда создавайте приложение с наименьшими привилегиями для выполнения задачи. Вы можете создать приложение, которое в основном просто создает этот каталог и изменяет безопасность - ничего больше, не что иное, - которое вызывается из вашего установщика. –

0

У меня возникла аналогичная проблема.

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

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

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

0

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

+0

В этом вопросе четко сказано, что речь идет о каталоге AllUsers \ ApplicationData \ MyProduct. Профили роуминга не имеют ничего общего с файлами системных глобальных данных. – mghie

3

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

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

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

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

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

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

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

+0

Если вы все же решите переместить «путь в ад», я рекомендую использовать подход JEDI/JWSCL (см. Ответ SimaWB). – Alex

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