Что заставляет xcopy говорить мне, что доступ запрещен?

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

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

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

5 ответов


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

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


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

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

источник


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


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

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

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

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


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