Вы можете сделать это, изменив права доступа, НО я настоятельно рекомендую просто оставить их открытыми (просто будьте осторожны, чтобы очищать поток после каждой пакетной записи).
В первой части я пытаюсь ответить непосредственно на ваш вопрос ( "Как предотвратить ..." ), но во второй части я попытался наметить другой подход (сделать ваше приложение устойчивым: сохранить резервное копирование).
Как предотвратить ...
Предполагая, что вы работаете в Windows, чтобы другие пользователи не связывались с ними, вы должны:
Установить атрибут скрытый . По умолчанию скрытые файлы скрыты, и многие пользователи даже не увидят их. Если вы можете сделать это на уровне каталога, тогда даже лучше.
Изменить ACL на Запретить Full access
на Users
и Administrators
группу. Лучше, если вы выберете вишню и просто оставите Read
разрешения. По умолчанию Windows выбирает наиболее строгую политику, даже если пользователь принадлежит к двум группам, тогда это фактически остановит всех на запись этого файла (если вы также откажете разрешения Read
, они даже не смогут видеть его содержимое, но см. позже).
- Создайте специальную группу (с необходимыми разрешениями и только для них) с одним пользователем. Убедитесь, что пользователь не был автоматически добавлен в группу
Users
.
- Измените ваше приложение, чтобы выдавать себя за этого пользователя при записи этих файлов. Если вы оставили разрешения
Read
на месте, тогда код для чтения не будет затронут.
Не забудьте проверить с разными версиями и выпусками Windows (HomeUsers
постоянно подпрыгивает.) Если ваше приложение является службой Windows, то все может быть немного проще, см. комментарий eryksun .
Вы можете экспериментировать со всеми этими вещами, просто используя Windows Explorer, просто найти правильный баланс, но не забывайте, что каждая отдельная установка - это отдельный мир, и только Бог знает, что такое среда (но он не знает, почему) .
Несколько очевидных недостатков:
- Администратор ВСЕГДА может делать то, что он хочет, тогда они могут найти эти файлы и отменить разрешения. Я думаю (я не уверен), что System Installer имеет некоторые специальные привилегии, чтобы предотвратить это, но я не уверен (и я не могу представить, как это сделать).
- Установка намного сложнее (и она вам понадобится, если у вас ее нет). Вы можете сделать это, когда приложение выполняется в первый раз, но тогда вам потребуются административные привилегии (только один раз, но, вероятно, хуже).
- Ваш код более сложный.
- Больше настроек означает больше вещей, которые могут пойти не так, сбалансируйте это с усилиями вашей команды технической поддержки.
- Обновления (и работа службы технической поддержки) будут более сложными.
- Пользователи с определенными привилегиями не будут затронуты (см. другой комментарий ), но это действительно хорошая вещь, и вам не следует каждый раз пытаться обойти это.
Резервное копирование - это ключ!
Не забывайте, что если они действительно хотят сломать ваше приложение, они просто удаляют каталог приложения ...
Я думаю, но я не знаю вашего конкретного варианта использования, что, возможно, вы подходите к проблеме с неправильной точки зрения. Если вы хотите помешать пользователю испортить ваши файлы данных (преднамеренно или нет), то вам нужен BACKUP . Сохраняйте копии в разных местах каждый раз, когда вы пишете их, пометьте их как hidden и живите счастливо. Если они не слишком большие, вы можете даже сохранить контент прямо в Реестре Windows . Для зашифрованных / хешированных / контрольных сумм ваше приложение может легко обнаружить, когда они повреждены или отсутствуют: просто восстановите резервную копию, и все готово.