Мне нужен файл для редактирования всеми локальными пользователями. Приложение сохраняет общую информацию для всех пользователей в своей папке в ProgramData. Мне нужно гарантировать чтение и запись всем пользователям, так как информации так мало, что она не заслуживает использования базы данных.
Я получаю путь к папке с: Path.Combine(Application.CommonAppDataPath, "InfoConfig");
Все пользователи могут читать, писать и создавать в этой папке. За исключением файлов, созданных другими пользователями .
Я уже безуспешно пытался удалить Creator Owner. Поэтому моей последней попыткой было не наследовать от папки контейнера и создать разрешения с нуля для SYSTEM, администраторов и пользователей. Но это тоже не сработало, вот мой код.
string sharedFolder = Path.Combine(Application.CommonAppDataPath, "InfoConfig");
if (!Directory.Exists(sharedFolder))
{
DirectoryInfo directoryInfo = Directory.CreateDirectory(sharedFolder);
DirectorySecurity directorySecurity = directoryInfo.GetAccessControl();
directorySecurity.SetAccessRuleProtection(true, false);
FileSystemRights fileSystemRights =
FileSystemRights.FullControl |
FileSystemRights.Modify |
FileSystemRights.Read |
FileSystemRights.Delete;
SecurityIdentifier usersSid =
new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null);
SecurityIdentifier systemSid =
new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null);
SecurityIdentifier adminsSid =
new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
FileSystemAccessRule rule =
new FileSystemAccessRule(systemSid, fileSystemRights, AccessControlType.Allow);
directorySecurity.AddAccessRule(rule);
rule = new FileSystemAccessRule(adminsSid, fileSystemRights, AccessControlType.Allow);
directorySecurity.AddAccessRule(rule);
rule = new FileSystemAccessRule(usersSid, FileSystemRights.Read
| FileSystemRights.Write
| FileSystemRights.Modify,
AccessControlType.Allow);
directorySecurity.AddAccessRule(rule);
directoryInfo.SetAccessControl(directorySecurity);
}
По-прежнему не работает. Что я делаю не так?