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

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

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

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

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

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

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


person Rory    schedule 20.01.2010    source источник


Ответы (2)


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

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

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

person Chris Becke    schedule 20.01.2010
comment
Как вы думаете, разумно ли иметь папку в c:\users\public\AppData с измененным ACL, чтобы все пользователи могли читать/писать, или это также удивит системных администраторов и/или будет конфликтовать с автоматизированными политиками? Я предполагаю, что было бы возможно, но гораздо больше работы, чтобы отдельные кеши для каждого пользователя хранились в их пользовательской папке AppData, но я действительно хотел бы избежать этого, если это вообще возможно. - person Rory; 20.01.2010
comment
\users\public\AppData — это (единственная) папка, в которой уже разумно ожидать, что все пользователи могут читать файлы. Поэтому я подумал, что это наиболее разумное место (наименее удивительное: P) для добавления папки, доступной для записи всем пользователям. - person Chris Becke; 20.01.2010
comment
На самом деле я решил создать подпапку в Environment.SpecialFolder.CommonApplicationData и настроить ACL, чтобы все пользователи могли читать/записывать. Обычно это расположение C:\ProgramData (не C:\users\public) в Win7/Win8 и C:\Documents And Settings\All Users\Application Data в XP. - person Rory; 09.11.2014

Существует скрытая папка, которая обычно находится в корневом каталоге вашего диска Windows c:\ProgramData.

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

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

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

person tonyb    schedule 15.09.2020