Запрошена операція не може бути виконана у файлі з відкритим розділом, призначеним для користувача


210

Кожного разу, коли я намагався скопіювати 4 файли у свою папку біна, після зупинки основної служби я отримую помилку з одним файлом (TexteDll). Помилка:

Cannot copy TexteDll: The requested operation cannot be performed on a file 
with a user-mapped section open

Це може бути пов’язано з деяким блокуванням системи. Або, можливо, інший процес використовує цю DLL. Коли я google, я виявив, що перезавантаження системи може вирішити це.

Чи може хтось запропонувати причину чи рішення для цього? Я перевірив властивості TexteDll (загальна, версія, безпека тощо). Все здається нормальним.



8
насправді є ще багато "дублікатів" питання (наприклад: stackoverflow.com/questions/1818076/… ) - проблема полягає в тому, що щоразу першопричиною стає щось інше.
MaciekTalaska

6
наступного разу спробуйте скористатися "провідником процесів" з сайту Microsoft. Він має функцію під назвою "знайти ручку". шукайте там свій файл, і він покаже, який процес має обробляти цей файл. Тоді ви можете почати досліджувати, чому ця програма має такий доступ. До речі, зупинення послуги не обов'язково означає виконувану версію, якою закінчується служба. Виконавчий файл може розміщувати кілька служб. У гіршому випадку багато сервісів .net, які використовують величезну кількість пам’яті, як правило, припиняються після вивільнення цієї пам’яті, яка відбувається іноді через хвилини після зупинки послуги.
Ердоган Куртур

3
Hehehe Visual Studio заблокував мою DLL. Закрили Visual Studio і спробували відновити Рішення, і воно спрацювало.
Леніел Маккаферрі

Це, очевидно, конфлікт пам’яті. Конкретний "екземпляр" об'єкта має деяку виділену бітову пам'ять, а потім пізнає, що пам'ять (статично?), Виділена йому, вже була відображена в іншому місці, ймовірно, з іншим рівнем доступу до системи.
ouflak

Відповіді:


177

У моєму випадку саме Провідник блокував DLL, який був зібраний у папку Налагодження ... Дивно, чи не так?

Я дізнався, використовуючи інструмент під назвою Unlocker.

Доводилося видаляти програму Unlocker, навіть коли вона казала, що блокування файлу не було, і я не міг видалити папку, поки не видалив цей єдиний файл ...

Після цього він склав.

Редагувати:

Я дізнався, чому в моєму випадку це відбувається. У мене було відкрито DLL у текстовому редакторі всередині Visual Studio ...


33
У мене було відкрито dlo і в одному з моїх багатьох візуальних вікон-студій. Дякуємо, що опублікували це оновлення.
ptfaulkner

3
Те саме, якось загрозливий DLL був відкритий у текстовому вікні в редакторі.
Харв

3
DLL також відкривається як вкладка в VS! Дякую!
Connell

5
Повне розкриття: посилання на "Unlocker" - це шпигунське програмне забезпечення. Він встановлює всілякі панелі інструментів і лайно, навіть якщо ви знімаєте всі прапорці, говорячи, що ви не хочете їх.
Тім

7
Використовуйте Process Explorer замість Unlocker. Після запуску PE перейдіть до Find -> Find Handle або Dll та вставте ім’я замкненого файлу. Він покаже, який процес його заблокував. Вбийте його, якщо ви впевнені, що це нормально, і проблема повинна бути вирішена.
Микита Г.

71
  • Іноді, коли ви двічі клацніть на попередженні про невідповідність посилань на версію збірки між двома або більше проектами, ви забуваєте закрити вікно перегляду збірки, і воно залишається там серед інших вкладок ... тож ви закінчуєте, що збірка блокується самим VS і знадобилося мені досить багато часу, щоб зрозуміти це :)

    Будьте обережні з потужністю, яку забезпечує VS;)

  • Ще один фіктивний сценарій. Іноді просто видаляючи всю папку obj або просто попереджений файл, оскільки заблокована допоможе у цій шаленій помилці.

2
сортував це для мене ... Я навіть перезапустив систему, але VS знову відкрив вікно перегляду збірки. Закриття всіх вкладок зробило роботу. Ура
Дейв Лоуренс

35

закрити всі документи на VS та спробувати відновити його знову. Якщо це не працює, перезапустіть VS. Ця проблема пов'язана з блокуванням файлів DLL.


3
те ж, якесь дивацтво з В.С. перезапуск сортував це для мене.
PJUK

1
Це працювало для мене. Дивна річ у моїй конкретній обставині. Я виконав свій exe окремий, поза середовищем VS. Залишив його працювати протягом ночі (тест пам’яті - пройшов), вранці його вимкнено, пара невеликих змін коду змінилася і раптом не змогла закінчити мою збірку через це. Дивно, як ця пам'ять здавалася конфліктною.
ouflak

Прикро, спасибі, відкритий документ викликав помилку, що БС!
Брайан Огден

"Закрити всі документи" та відновити фактично працював для мене! : o
Антуан Мельцхайм

11

Закрийте візуальну студію, видаліть бін, папку випуску налагодження та знову запустіть проект візуальної студії. що вирішило мою проблему


Це працювало для мене! Дякую! Я перейменував каталоги, про всяк випадок, і це спрацювало.
DavidScherer

10

У мене була така ж проблема, і в моєму випадку виявилося, що існуючий вихідний файл був заблокований іншим додатком.

Ви можете перевірити, яка програма блокує ваш вихідний файл за допомогою OpenedFilesView: http://www.nirsoft.net/utils/opened_files_view.html


10

Я розробник і не люблю додатків, які вводяться в Реєстр, як Unlocker. Я використовував SysInternals Process Explorer, який заблокував dll Find > Find Handle or Dll [Ctrl-F]і вбив процес.


1
Виявлено, що він був заблокований процесом VS, який не загинув, коли VS закрили.
Йостатик

2
Навіть після закриття DevEnv і диспетчера завдань цього не показав, Process Explorer показав кілька примірників DevEnv Suspended. Вбити цих, і це спрацювало.
DeclanMcD

1
Це найправильніша відповідь, оскільки вона показує, як знайти, який процес блокує файл, а не просто говорити "в моєму випадку це було через X". Кожен розробник у Windows отримав би перевагу від додавання procexp та виклику до своєї панелі інструментів!
Метт Ванчап

9

Інші вже встановили, що ця помилка пов’язана з іншою програмою, що має блокування у файлі. Просто хотів зазначити, що git diffблокує файли також, поки ви не вийдете з нього. Саме це спричинило це в моєму випадку.


Те саме питання для мене. Забув, що не кинув різницю. На жаль, я не побачив такої відповіді, поки не закрив купу інших вікон і не побачив, що це все ще в різниці. Тоді я переконався, що я не опублікував дурної відповіді, тому +1 :)
codeMagic

1
@codeMagic Git 2.23 (Q3 2019) дозволить уникнути цієї пастки. Дивіться мою відповідь нижче
VonC

9

У мене було те саме питання. Як я це вирішив:

  1. Відкрийте "Диспетчер завдань"
  2. Закінчити завдання "Explorer.exe"
  3. Клацніть «Файл» -> Створити нове завдання - Введіть «explorer.exe» -> ОК
  4. Очистіть мій проект, і він працює

Мені також довелося перезапустити процес Explorer із диспетчера завдань. У моєму випадку я переглянув "проблемний" файл у області "Попередній перегляд" Провідника. Це також здається блокувати файли час від часу, не випускаючи їх ніколи. Закриття всіх вікон Провідника не допомогло. Довелося перезапустити процес.
gehho

Нарешті! Дякую.
TheJack

6

У вас працює якесь антивірусне програмне забезпечення. Можливо, що програмне забезпечення AV (або якесь інше програмне забезпечення) читало файл за допомогою API-файлів відображення файлів, що спричинило проблему.


6

У моєму випадку мені довелося вбити висячий MSBuild.exeпроцес, який блокував файл (він був там навіть після закриття Visual Studio).


1
Ти впорався. Дуже дякую!
Ларрі

4

Видалення папки obj та відновлення роботи працювали для мене


3

У мене була така ж проблема. Перезапуск для мене не працював. Був процес, який називається VBSCompiler, що працює в диспетчері завдань. Мені довелося закінчити процес, щоб виправити цю помилку.


Ви також можете очистити своє рішення та спробувати ще раз
Nirjhar Vermani

3

Жодне з розміщених тут рішень не працювало для мене. Файл був заблокований devenv.exe (Visual Studio), але якби я його перезапустив, він повторно заблокував його.

Як не дивно, Windows не дозволила мені видалити файли (до кошика), але Shift + Delete (постійне видалення) спрацювало.


2

Закрийте Visual Studio і запустіть його як адміністратор. Виправлена ​​моя проблема.


Я отримував цю помилку під час створення блискучого додатка в rstudio, тому багато з цих відповідей мені не допомогли. Але я побачив це і спробував перезапустити rstudio як адміністратор, і це спрацювало. Потім, коли я повернувся до роботи як користувач, він знову працював.
Павло


2

Для мене рішення було перезавантажити комп'ютер.


2

У 2016 році Ендрю Катберт зазначив, що git diff також блокує файли, поки ви не вийдете з нього.

Так не буде з Git 2.23 (Q3 2019)

Див. Комітет 3aef54e (11 липня 2019 р.) Йоганнеса Шинделіна ( dscho) .
(Об'єднав Хуніо С Хамано - gitster- в комісії d9beb46 , 25 липня 2019 р.)

diff: munmap()вміст файлу перед запуском зовнішньої розл

Запускаючи зовнішній відмінність від, скажімо, a diff tool, можна з упевненістю припустити, що ми хочемо написати ці файли.
У Windows це означає, що не може бути жодного іншого процесу, який би тримав відкриту ручку до згаданих файлів, або навіть просто відображений регіон.

Тож давайте переконаємось, що git diffсам по собі не тримає жодної відкритої ручки щодо відповідних файлів.

Насправді ми просто випустимо пару файлів одразу, оскільки зовнішній diff використовує файли, які ми тільки що написали, тому нам більше не потрібно зберігати вміст файлу в пам'яті.

Це виправляє git-for-windows # 1315


1

Я бачив ці помилки під час створення додатків Dot Net із програмою Ant.

У моєму випадку це було наше корпоративне програмне забезпечення для резервного копіювання, агент Symantec DLO. Зупинення та виключення каталогу в моєму антивірусному програмному забезпеченні та закриття Visual Studio, здається, працює.


1

у моєму випадку видалив папку obj в корені проекту і відновити проект вирішив мою проблему !!!


0

Я зіткнувся з цією помилкою, і виявилося, що проблема FxCop проти мого проекту. Я закрив FxCop і потім міг знову компілювати.


0

Якщо це веб-додаток, видалення файлів у папці тимчасових файлів ASP.NET може бути рішенням.


0

Якщо ви використовуєте профілі на зразок AQ Time, вони також можуть блокувати файл. Рішенням у цьому випадку буде перезапустити профайлер або просто вивантажити / завантажити відповідну збірку з профілера. За час AQ я помітив, що він випускає файл через деякий час, але я не можу за все життя сказати, що це за час очікування. Здається, випадково



0

У мене виникла помилка, викликана тим, що питання "більше" проти відповідного файлу залишається в іншій консолі. На жаль


0

Жодне із зазначеного не вирішило цього питання.

Хтось мав один проект у моєму наборі рішення використовувати x64 CPU у конфігурації збірки. Змінення його на будь-який процесор призвело до збірки для використання нової папки. Я досі не знаю, який процес мав блокування у цьому файлі.


0

У мене був цей самий випуск. Я видалив dll з папки temp, видалив доступ лише для читання та перезапустив машину і змусив її працювати.


0

У моєму випадку я просто закриваю весь екземпляр і копіюю свою папку кореневих додатків і вставляю її в інше місце, а потім відкриваю рішення в VS.


-1

Мою проблему також було вирішено просіюванням через Провідник процесів. Однак процес, який мені довелося вбити, був MySQL Notifier.exe, який все ще працював після закриття всіх програм VS та SQL.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.