Подтвердить что ты не робот

Привилегии/проблема с владельцем при записи в C:\ProgramData \

Как указано в Написание файла конфигурации в C:\Program Files (x86)\MyApp\myapp.cfg, против привилегий администратора, это not неплохо написать конфигурационный файл в C:\Program Files (x86)\MyApp\myapp.cfg.

Вместо этого мое программное обеспечение теперь сохраняет свои данные в поддирете %ALLUSERSPROFILE% (ex: C:\ProgramData\MyApp\myapp.cfg на Win7)

[Я использую myfile = open(filename, 'a') в Python для этого.]

Теперь я сталкиваюсь с проблемой об этом файле:

  • Я установил программное обеспечение с помощью User A и запустил его, затем был записан файл C:\ProgramData\MyApp\myapp.cfg.
  • Затем я сменил пользователя на User B и снова запустил мое программное обеспечение: теперь отображается ошибка: User 2 не имеет права писать в C:\ProgramData\MyApp\myapp.cfg (Permission denied).

Почему? Разве не %ALLUSERSPROFILE% место, которое может быть написано всеми пользователями? Как решить эту проблему?

4b9b3361

Ответ 1

Нет, C:\ProgramData, aka FOLDERID_ProgramData, имеет ограничения безопасности. Стандартные пользователи могут создавать там файлы. Но эти файлы по умолчанию защищены так, что только пользователь, создавший файл, может впоследствии модифицировать файл.

Рекомендуемое решение для вашего установщика создать подкаталог C:\ProgramData для вашего общего хранилища. И этому вспомогательному каталогу должен быть предоставлен разрешающий ACL программой установки. Именно это предоставляет желаемый доступ ко всем стандартным пользователям.

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

Ответ 2

Я хотел бы добавить к этому, поскольку у меня были проблемы с записью в C:\ProgramData. Моя проблема закончилась тем, что мой каталог/файлы в C:\ProgramData были написаны администратором. Когда мое приложение работало под обычным пользователем, оно не могло писать туда, поэтому Windows автоматически использовала вместо этого C:\Users\fooface\AppData\Local\VirtualStore\ProgramData. Я нашел путь, по которому он писал, используя монитор процесса в моем приложении. Увидев это, я удалил файлы из C:\ProgramData и снова запустил свое приложение, и оно записало туда, как и ожидалось.

Надеюсь, это кому-нибудь поможет.