Ошибка File.Copy при копировании библиотеки DLL, которая не используется - PullRequest
1 голос
/ 06 ноября 2011

Я создал приложение winforms (C #), которое будет принимать список путей к файлам и копировать эти файлы (из другого решения VS) в новое место (в папке, которую пользователь указывает) в той же структуре каталогов в настоящее время они существуют в локальной файловой системе.

Я использую класс Path, Directory и т. Д., И все прекрасно работает ... за исключением случаев, когда он достигает пути к файлу, который указывает на DLL.

Библиотеки DLL, которые я пытаюсь скопировать, являются частью другого решения, и это решение в настоящее время не открыто.

Я попытался перезагрузить компьютер, чтобы удостовериться, что Visual Studio каким-то образом не подключается к этой DLL даже после закрытия решения.

Рассматриваемая DLL может быть скопирована обычным способом вручную (то есть ярлыком копирования и вставки).

За исключением создания командного файла в программе и запуска xcopy по этому пути к DLL, я не знаю, как заставить это работать.

Из того, что я нашел в поиске Google (что не так уж много в этой конкретной ситуации), File.Copy () должен работать ..

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

Спасибо!

-Сообщение об ошибке: процесс не может получить доступ к файлу [вставьте путь к файлу], потому что он используется другим процессом (путь также определенно правильный)

-Просто скачал и попытался найти имя DLL с помощью Process Explorer. Я также запустил аналогичный exe-файл из командной строки, но безрезультатно. Он утверждает, что ничто не использует его. Вот почему я совершенно сбит с толку этим. Кроме того, я только что проверил разрешения, и все выглядит великолепно (т. Е. Полный доступ, действующие разрешения владельца)

-Он не обрабатывает открытые файлы. Он в основном строит правильные пути src и dest и выполняет File.Copy () для них. Как мне поступить с открытыми файлами? Я уверен, что смог бы выяснить, было ли оно открыто, но что бы я делал, если бы оно было открыто?

Ответы [ 4 ]

1 голос
/ 11 ноября 2011

Он не жалуется на файл, который вы пытаетесь скопировать, а жалуется на файл, который вы пытаетесь перезаписать копией. Многие кандидаты на это, например, вирусные сканеры всегда очень рады новым DLL. Или он загружается в процесс, типичный режим сбоя при попытке реализовать собственное автоматическое обновление.

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

0 голосов
/ 03 декабря 2018

Я тоже столкнулся с этой проблемой. Я пытался скопировать .DLL с FTP-сервера в локальный каталог (заменив существующий), и я не мог заставить его работать. Дает мне код «Отказано в доступе: 5» Ошибка.

Затем я понял, что .DLL на FTP-сервере не был помечен как скрытый, а .DLL, который я пытался заменить, был помечен как скрытый.

Как только я сменил местный, чтобы он тоже был виден. У меня больше не было проблем.

Итак, мое решение: Убедитесь, что оба файла видны.

Надеюсь, это кому-нибудь поможет

0 голосов
/ 11 ноября 2011

Как и Process Explorer, я бы использовал Process Monitor также от Microsoft, чтобы вы могли видеть, что происходит в момент сбоя, и позволяет вам видеть, есть ли что-нибудь еще, обращающееся к dll.

Возможные виновники

  1. программа, которую вы запускаете,
  2. ваш антивирус
  3. вирус.

Если путь, на который он жалуется, является путем назначения, то возможно ли, что путь слишком длинный?

Кроме того, при использовании Process Explorer убедитесь, что вы включили опцию, чтобы показать подробности для всех процессов, а не только для ваших собственных.

0 голосов
/ 11 ноября 2011

Вы в Vista или Win7?Если это так, проверьте «Настройки контроля учетных записей».Иногда это может повлиять на параметры безопасности .NET и предотвратить файловые операции, которые в противном случае работали бы.

...