Что заставляет xcopy сказать мне Access Denied?

Задача postbuild для одного из наших решений использует xcopy для перемещения файлов в общий каталог для сборки артефактов. По какой-то причине на моем компьютере (и на тестируемой виртуальной машине) xcopy не работает с "Access Denied". Вот что я сделал, чтобы попытаться изолировать проблемы:

  • Я попробовал обычную копию; это работает.
  • Я дважды проверил, что ни один из файлов, о которых идет речь, не доступен только для чтения.
  • Я проверил разрешения как для исходной, так и для целевой папки; Я полностью контролирую оба.
  • Я попытался вызвать xcopy из командной строки, если процесс сборки VS заблокировал файл.
  • Я использовал Unlocker и Process Explorer для определения отсутствия блокировок исходного файла.

Что я пропустил, кроме параноидальных теорий заговора с участием компьютеров, чтобы получить меня? Это происходит на моей машине dev и чистой VM, но этого не происходит ни для кого другого в проекте.

Ответ 1

Проблема решена; там две части к загадке.

Переключатель/O требует повышения в Vista. Кроме того, я заметил, что xcopy устарел в Vista в пользу robocopy. Теперь я общаюсь с нашими инженерами по строительству.

Ответ 2

/r = Используйте эту опцию для перезаписи файлов только для чтения в пункте назначения. Если вы не используете эту опцию, если хотите перезаписать файл только для чтения в пункте назначения вам будет предложено сообщение "Отказано в доступе" и команда xcopy перестанет работать.

Это мое разрешение этой ошибки.

Источник

Ответ 3

Обычно это происходит потому, что другой процесс блокирует файл. Бьюсь об заклад, у вашей машины разное количество ядер/разная скорость, чем у других. Попробуйте вставить несколько спальных мест, чтобы понять, разрешает ли он проблему.

Ответ 4

Вам нужно запустить XCOPY в качестве администратора, нет никакого способа обойти это.

Если вы не хотите запускать свою копию в качестве администратора, тогда вы должны использовать ROBOCOPY.

Обратите внимание, однако, что с ROBOCOPY очень заманчиво использовать коммутатор /COPYALL, который также копирует информацию аудита и требует "Управление правами на аудит прав пользователя", что снова приглашает вас работать как администратор в качестве быстрого решения. Если вы не хотите запускать свою копию в качестве администратора, то не используйте переключатель /COPYALL (или /Copy:DATSOU). Вместо этого используйте /Copy:DATSO, поскольку U означает aUditing.

Также обратите внимание, что если вы копируете NTFS в файловую систему FAT, вы не можете "Скопировать защиту NTFS в каталог/файл назначения".

Ответ 5

Если вы можете удалить файл в Проводнике Windows, попробуйте использовать командную строку с повышенными правами. Не знаю, почему Windows Explorer не запрашивает разрешения здесь для операции удаления, которая требует прав администратора через cmd.