2008-10-01 3 views
2

Этот снипп хорошо работает, если я пытаюсь писать в пользовательском каталоге, но как только я попытаюсь записать его в Program Files, он просто выполняет молча, и файл не был скопирован (без исключения). Если я попытаюсь скопировать файл в C: \ или в C: \ Windows, я поймаю UnauthorizedAccessException.Невозможно скопировать файл с соответствующими разрешениями с помощью FileIOPermission

Вы знаете другой способ получить разрешения на запись в этом каталоге или заставить его работать другим способом?

Любая помощь очень ценится! Благодаря

using(FileStream fs=File.Open(source, FileMode.Open)){ } 
try 
{ 
    FileIOPermission fp = new FileIOPermission(FileIOPermissionAccess.Write, 
          AccessControlActions.Change, "C:\\Program Files\\MyPath"); 
    fp.Demand(); //<-- no exception but file is not copied 
    File.Copy("C:\\Users\\teebot\\Documents\\File.xml","C:\\Program Files\\MyPath\\File.xml",true); 
} 
catch(SecurityExceptions) 
{ 
    throw(s); 
} 
catch(UnauthorizedAccessException unauthroizedException) 
{ 
    throw unauthroizedException; 
} 
+0

При повторном исключении просто используйте throw; - бросить; стирает трассировку стека. – 2008-10-01 21:45:13

ответ

1

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

Все, что вам нужно сделать, это добавить манифест в вашу программу, который задает требуемый уровень доступа, а затем система предполагает, что ваша программа поддерживает Vista и отключает все эти патчи для совместимости.

Вы можете увидеть пример файла манифеста на моем блоге по адресу:

http://www.nbdtech.com/blog/archive/2008/06/16/The-Application-Manifest-Needed-for-XP-and-Vista-Style-File.aspx

(фокус пост на получение правильной версии стандартных элементов управления, но декларации безопасности Vista, являются также есть)

1

Не записывайте в папке Program Files.

Это большой не-нет, и это особенно вызовет проблемы, когда наступает день, когда ваш код работает в Vista или на машине в компании, где пользователи получают стандартную безопасность, а не права администратора. Вместо этого используйте папку данных приложения.

0

Предоставление доступа к доступу к коду или разрешение на отказ от вашего код. Нельзя использовать для переопределения разрешений, предоставленных/запрещенных текущему пользователю.

1

Вы работаете на Vista? Если это так, вы можете столкнуться с виртуализацией файловой системы. Это функция в 32-битных версиях Vista, которая позволяет обычным пользователям писать защищенные части файловой системы. Это прокладка, предназначенная для уменьшения боли в функциях LUA Vista.

Короткий вариант заключается в том, что операционная система создаст виртуальную файловую систему для определенных защищенных корней (таких как программные файлы). Когда не-администратор пытается записать его, копия будет создана вместо оригинала. Когда ваша учетная запись пользователя попытается просмотреть файл, она увидит edit.s. Другие учетные записи пользователей будут видеть только оригинал.

Longer Версия: http://thelazyadmin.com/blogs/thelazyadmin/archive/2007/04/26/file-system-virtualization.aspx

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

  • Нет связанных вопросов^_^