2010-01-20 9 views
3

Я строю продукт, который включает в себяРекомендуемое местоположение файла, которое будет доступно для редактирования всеми пользователями Windows?

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

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

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

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

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

ответ

2

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

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

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

+0

Считаете ли вы, что разумно иметь папку в каталоге c: \ users \ public \ AppData с измененным ACL, чтобы все пользователи могли читать/писать, а также удивлять системных администраторов и/или конфликтовать с автоматическими политиками? Я предполагаю, что это будет возможно, но гораздо больше работы, чтобы иметь отдельные кэши для каждого пользователя, хранящегося в папке пользователя AppData, но я бы очень хотел избежать этого, если это вообще возможно. – Rory

+0

\ users \ public \ AppData - это (только) папка, в которой уже есть разумное ожидание, что все пользователи могут читать файлы. Поэтому моя мысль о том, что это наиболее разумное место (наименее удивительное: P), добавляет папку, доступную всем пользователям для записи. –

+0

Фактически я пошел на создание подпапки внутри 'Environment.SpecialFolder.CommonApplicationData' и установил ACL, чтобы все пользователи имели чтение/запись. Это место обычно 'C: \ ProgramData' (не' C: \ users \ public') на Win7/Win8 и является 'C: \ Documents and Settings \ All Users \ Application Data' на XP. – Rory