Доступная для записи папка всеми пользователями на одном компьютере - PullRequest
2 голосов
/ 14 апреля 2010

У меня есть настольное приложение .NET WPF, использующее встроенную базу данных (SQLite). Где разместить файл базы данных? Это одна и та же база данных для всех пользователей.

Я пытался использовать CommonAppData, но он не доступен для записи пользователям без прав администратора. Поэтому я попытался использовать специальное действие установщика, чтобы дать права на запись для всех пользователей в эту папку, но это не удалось на доменных ПК. Код:

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MyAppName");

DirectorySecurity security = Directory.GetAccessControl(appDataPath);
FileSystemAccessRule rule = new FileSystemAccessRule("Users", FileSystemRights.WriteData, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow);
security.AddAccessRule(rule);   
Directory.SetAccessControl(appDataPath, security);

Будет ли ". \ Users" работать с "Users" на домене?

Это лучший подход? Есть ли какая-нибудь другая папка, которую я мог бы использовать?

1 Ответ

2 голосов
/ 14 апреля 2010

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

Как правило, у вас есть все права на каталоги, которые вы создаете сами - поэтому я подходил к созданию подпапки приложения в папке ProgramData, а затем, как владелец (через создание) нового объекта, я полностью контролировал и мог бы добавить к этому все мои пользователи с полным доступом в качестве наследуемой записи контроля доступа.

Я также столкнулся с проблемами с «Пользователи», использующими Windows API, и мне пришлось переключиться на использование хорошо известного sid. Протестировано в немецкой системе, по крайней мере, строка «Пользователи» была совершенно другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...