2009-09-16 3 views
1

Я тестировал свое приложение, чтобы увидеть, насколько он работает при запуске пользователем, не являющимся администратором, и я обнаружил проблемы с обработкой файлов. Я получаю 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:

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

ответ

1

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

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

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

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

1

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

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

+0

Для некоторых файлов может потребоваться доступ извне приложения. Так как это так, что мне делать? –

+0

Вы можете попробовать и перейти к папке «Данные приложения» для пользователей. По умолчанию они должны иметь доступ к этому, не будучи администратором. Вы можете получить этот путь для пользователя с помощью Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData) Это означает, что данные приложения не распространяются между пользователями. HTH. –

+0

Данные приложения должны использоваться для всех пользователей.Вот почему я использую каталог All Users \ Application Data. Его просто то, что файлы, созданные при входе в систему как пользователь admin, не могут быть изменены пользователями, не являющимися администраторами. –

1

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

+0

Это то, что я сделал, но дал ответы на вопрос Р.Бемроуза, поскольку он ответил, что пришел к решению. Спасибо хоть. –

Смежные вопросы