Что заставляет xcopy сообщать мне об отказе в доступе?

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

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

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


person OwenP    schedule 18.03.2009    source источник
comment
Вы уверены, что процесс xcopy запущен под вашей учетной записью?   -  person NotMe    schedule 18.03.2009
comment
Опубликуйте командную строку, которую вы пытаетесь выполнить, а также точное сообщение об ошибке.   -  person James Van Huis    schedule 18.03.2009


Ответы (6)


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

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

Источник

person Tamir    schedule 23.07.2014
comment
Спасибо, это помогло мне. - person ziddarth; 02.02.2016
comment
Это также решило проблему для меня, даже когда конечный файл не отображался как «только для чтения».... - person Juan Manuel Perez; 05.04.2016
comment
Спасибо, по крайней мере у меня работает. - person Chandra Shekhar; 24.05.2021

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

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

person OwenP    schedule 18.03.2009

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

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

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

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

person iNoob    schedule 12.05.2015

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

person krosenvold    schedule 18.03.2009
comment
Не могли бы вы подробнее рассказать о проблеме с несколькими ядрами? xcopy также не работает в командной строке, даже если VS не открыт. Такие инструменты, как Unlocker, утверждают, что ничто не блокирует файл. Спать некуда. - person OwenP; 18.03.2009
comment
Судя по вашему описанию, вы находитесь в процессе автоматизации сборки. Windows, как известно, плохо справляется с этим из-за блокировки файлов. Я предполагаю, что какой-то предыдущий процесс, который вы начали, в некоторых случаях не полностью завершается, когда начинается копирование. - person krosenvold; 18.03.2009

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

person sennett    schedule 05.12.2013

если вы копируете файл в папку IIS, вам нужно запустить пакетный файл от имени администратора.

person Alper Ebicoglu    schedule 02.11.2018