Обработка файлов с пользователем без прав администратора - PullRequest
1 голос
/ 17 сентября 2009

Я тестировал свое приложение, чтобы увидеть, насколько хорошо оно работает при запуске пользователем без прав администратора, и обнаружил проблемы с обработкой файлов. Я получаю исключение UnauthorizedAccessException при попытке перезаписать файл, если файл был создан администратором и пользователем.

При записи файла я сначала создаю файл как файл .tmp, затем использую File.Copy для перезаписи оригинала. Файл .tmp создается, но File.Copy не удается. Мои файлы записываются в общий каталог («C: \ Documents and Settings \ All Users \ Application Data» в XP).

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

Я нашел это:

        System.Security.AccessControl.DirectorySecurity sec =  
                                System.IO.Directory.GetAccessControl ( directory );  
        FileSystemAccessRule accRule = new FileSystemAccessRule ( Globals.userIdentity,  
             FileSystemRights.FullControl, AccessControlType.Allow );  
        sec.AddAccessRule ( accRule );  

Решит ли это проблему с каталогом, в котором находятся все файлы? Или мне придется что-то делать с каждым файлом? Если так, что это такое?

Edit:

Пользователи без прав администратора не могут изменять файлы, созданные пользователем с правами администратора. Это не хорошо. Мне нужно, чтобы все файлы были доступны для редактирования всем пользователям. Нет ли каких-либо разрешений, которые можно установить при первоначальном создании файла, которые предоставят это?

Ответы [ 3 ]

1 голос
/ 21 сентября 2009

Я только что проверил разрешения для каталога All Users \ Application Data. ACL «Пользователи» и «Опытные пользователи» не имеют разрешения «Удалить вложенные папки и файлы».

Они могут удалять свои собственные файлы, поскольку ACL "CREATOR OWNER" имеет полный доступ.

Что касается того, как обойти это, вы могли бы предоставить всем доступ всем, но лучшей идеей было бы предоставить ACL «Пользователи» и «Опытные пользователи» разрешение «Удалить подпапки и файлы» в каталоге appdata приложения.

В качестве альтернативы вы можете назначить разрешения «Удалить» и «Изменить» для самого файла для «Пользователей» и «Опытных пользователей» при его создании.

1 голос
/ 21 сентября 2009

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

1 голос
/ 17 сентября 2009

Этот код даст пользователю полные права доступа к папке, однако, это может снова привести к сбою в системе безопасности.

Лучший способ убедиться, что ваше приложение всегда может хранить информацию, - это использовать IsolatedStorage. Однако если вам нужен доступ к вашим файлам за пределами вашего приложения, тогда это не лучшее решение.

...