Предполагаемое местоположение файла, которое будет редактироваться всеми пользователями Windows?

Я создаю продукт, который включает в себя

  • кэширование данных службы Windows на локальном компьютере,
  • пользовательские процессы читают эти данные и записывают свои собственные данные,
  • служба, в свою очередь, записывает эти данные на сервер.

Где мне разместить файлы данных для этого, чтобы они были доступны всем пользователям и были доступны для чтения / записи? Программное обеспечение будет работать в корпоративной среде, где рабочие столы иногда довольно заблокированы, поэтому, например, некоторые пользователи не будут иметь прав на запись в C:\Program Files.

Я не думаю, что C:\Documents And Settings\All Users\Application Data\ - хороший кандидат - я думаю, что по умолчанию только администраторы и опытные пользователи имеют доступ для записи здесь.

Я мог бы использовать папку Application Data каждого пользователя, но это было бы немного болезненно, поскольку разные люди могли бы использовать каждую машину... так что было бы проще, если бы было только одно общее местоположение.

Я занимаюсь разработкой на C# .net 2005, но это, вероятно, не слишком актуально.

1 ответ

Решение

К сожалению, у вас нет реального выбора. Вы должны (вы действительно должны) вызвать SHGetSpecialFolderLocation, чтобы получить путь к c:\users\public\AppData (это имя папки, на которую вы ссылались выше, но в Vista и, возможно, Windows 7). Затем вы ДОЛЖНЫ создать собственную папку приложения. в нем. И затем, вы ДОЛЖНЫ использовать API безопасности для изменения ACL созданной папки.

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

c: \ users \ public \ AppData является ближайшим. Модификация ACL папки приложения здесь кажется лучшим подходом. Конечно, как только вы прибегаете к модификации ACL, папка действительно может быть создана где угодно. Но это может удивить системных администраторов и привести к бреши в безопасности.

Есть скрытая папка, которая обычно находится в корне вашего диска Windowsc:\ProgramData

Правильный способ получить путь к этой папке на C# -

string folder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);

Это скрытая папка, которая доступна для чтения / записи всем пользователям и существует во всех современных версиях Windows, включая 7,8 и 10. Лучше всего создать в ней папку с тем же именем, что и ваше приложение, и поместить туда свои данные..

Другие вопросы по тегам