Żądanej operacji nie można wykonać na pliku z otwartą sekcją mapowaną przez użytkownika

210

Ilekroć próbowałem skopiować 4 pliki do folderu bin, po zatrzymaniu usługi głównej pojawia się błąd z jednym plikiem (TexteDll). Błąd jest następujący:

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

Może to być spowodowane blokowaniem systemu. A może inny proces korzysta z tej biblioteki DLL. Kiedy przejrzałem Google, stwierdziłem, że ponowne uruchomienie systemu może rozwiązać ten problem.

Czy ktoś może zaproponować przyczynę lub rozwiązanie tego problemu? Sprawdziłem właściwości TexteDll (ogólne, wersja, bezpieczeństwo itp.). Wszystko wydaje się normalne.

Piotr
źródło
8
w rzeczywistości jest o wiele więcej „duplikatów” pytania (na przykład: stackoverflow.com/questions/1818076/… ) - problem polega na tym, że za każdym razem podstawowa przyczyna jest inna.
MaciekTalaska,
6
następnym razem spróbuj użyć „eksploratora procesów” ze strony Microsoft. Ma funkcję o nazwie „Znajdź uchwyt”. wyszukaj tam swój plik, a pokaże Ci, który proces ma uchwyt na tym pliku. Następnie możesz zacząć badać, dlaczego ten program ma taki dostęp. BTW, zatrzymanie usługi niekoniecznie oznacza plik wykonywalny, w którym usługa hosta się zakończy. Plik wykonywalny może obsługiwać wiele usług. W najgorszym przypadku wiele usług .net wykorzystujących ogromne ilości pamięci ma tendencję do kończenia się po zwolnieniu pamięci, co zdarza się czasem kilka minut po zdarzeniu zatrzymania usługi.
Erdogan Kurtur
3
Hehehe Visual Studio blokował moją bibliotekę DLL. Zamknąłem Visual Studio i próbowałem odbudować Rozwiązanie i zadziałało.
Leniel Maccaferri
To oczywiście konflikt pamięci. Określona „instancja” obiektu ma przypisaną część przydzielonej pamięci bitowej, a następnie stwierdza, że ​​przydzielona do niej pamięć (statycznie?) Została już zamapowana w innym miejscu, prawdopodobnie z innym poziomem dostępu do systemu.
ouflak

Odpowiedzi:

177

W moim przypadku to Explorer blokował bibliotekę DLL skompilowaną w folderze debugowania ... Dziwne, prawda?

Dowiedziałem się za pomocą narzędzia o nazwie Unlocker.

Musiałem usunąć za pomocą Unlockera, nawet gdy mówiono, że nie ma blokady pliku i nie mogłem usunąć folderu, dopóki nie usunę tego pojedynczego pliku ...

Potem się skompilował.

EDYTOWAĆ:

Dowiedziałem się, dlaczego w moim przypadku tak się dzieje. Miałem bibliotekę DLL otwartą w edytorze tekstów w Visual Studio ...

Daniel Lobo
źródło
33
Miałem również otwartą dlo w jednym z moich wielu okien studia wizualnego. Dziękujemy za opublikowanie tej aktualizacji.
ptfaulkner
3
To samo, jakoś zmieniona biblioteka DLL została otwarta w oknie tekstowym w edytorze.
Harv
3
Biblioteka DLL otwarta również jako karta w VS! Dziękuję Ci!
Connell,
5
Pełne ujawnienie: link do „Unlocker” to oprogramowanie szpiegujące w całości. Instaluje wszystkie rodzaje pasków narzędzi i bzdury, nawet jeśli odznaczysz wszystkie pola, mówiąc, że ich nie chcesz.
Tim
7
Użyj instread Process Explorer w Unlocker. Po uruchomieniu PE przejdź do Znajdź -> Znajdź uchwyt lub bibliotekę DLL i wklej nazwę zablokowanego pliku. Pokaże, który proces go zablokował. Zabij go, jeśli masz pewność, że możesz to zrobić, a problem powinien zostać rozwiązany.
Nikita G.,
71
  • Czasami po dwukrotnym kliknięciu ostrzeżenia o niezgodności przywoływanej wersji zestawu między co najmniej dwoma projektami zapominasz zamknąć okno widoku zespołu i pozostaje ono w tym miejscu między innymi kartami ... w efekcie zespół jest blokowany przez VS i zrozumienie tego zajęło mi sporo czasu :)

    Uważaj na moc jaką zapewnia VS;)

  • Kolejny sztuczny scenariusz. Czasami po prostu usuwa cały folder obj lub tylko plik ostrzega, ponieważ zablokowany pomaga w tym gównianym błędzie.
Arman McHitarian
źródło
2
posortowałem to dla mnie ... Zrobiłem nawet restart systemu, ale VS ponownie otworzył okno widoku zespołu. Zamknięcie wszystkich kart wykonało zadanie. Na zdrowie
Dave Lawrence
35

zamknij wszystkie dokumenty w VS i spróbuj odbudować ponownie. Jeśli to nie działa, uruchom ponownie VS. Ten problem dotyczy blokady plików DLL.

cihata87
źródło
3
to samo, trochę dziwności z VS. restart posortował to dla mnie.
PJUK
1
To zadziałało dla mnie. Dziwna rzecz w moich szczególnych okolicznościach. Wykonałem mój exe samodzielny, poza środowiskiem VS. Zostawiłem go na noc (test pamięci - przeszedł), zamknąłem go rano, kilka małych zmian w kodzie i nagle nie mogłem skończyć mojej kompilacji z tego powodu. Dziwne, jak to wspomnienie wydaje się tak konfliktować.
ouflak
Paskudne, dzięki, otwarty dokument powodował błąd, co BS!
Brian Ogden
„Zamknij wszystkie dokumenty” i przebudowa faktycznie działała dla mnie! : o
Antoine Meltzheim
11

Zamknij program Visual Studio, usuń bin, folder wydania debugowania i ponownie uruchom projekt Visual Studio. to naprawiło mój problem

użytkownik2038221
źródło
To zadziałało dla mnie! Dzięki! Na wszelki wypadek zmieniłem nazwy katalogów i zadziałało.
DavidScherer
10

Jestem programistą i nie lubię aplikacji wstrzykiwanych do Rejestru, takich jak Unlocker. Użyłem SysInternals Process Explorer, który proces zablokował moją bibliotekę DLL Find > Find Handle or Dll [Ctrl-F]i zabił proces.

guneysus
źródło
1
Stwierdzono, że został zablokowany przez proces VS, który nie umarł, gdy VS został zamknięty.
Yoztastic
2
Nawet po zamknięciu DevEnv i Menedżer zadań tego nie pokazał, Process Explorer pokazał kilka instancji DevEnv Suspended. Zabij je i zadziałało.
DeclanMcD
1
To jest najbardziej poprawna odpowiedź, ponieważ pokazuje, jak znaleźć proces, który blokuje plik, a nie tylko powiedzieć „w moim przypadku było to spowodowane przez X”. Każdy programista w systemie Windows skorzystałby na dodaniu procexp i procmon do swojego paska narzędzi!
Matt Wanchap
9

Inni już ustalili, że ten błąd jest spowodowany blokadą pliku przez inną aplikację. Chciałem tylko zaznaczyć, że git diffblokuje również pliki, dopóki z niego nie wyjdziesz. To właśnie spowodowało to w moim przypadku.

andrew.cuthbert
źródło
Ten sam problem dla mnie. Zapomniałem, że nie opuściłem diff. Niestety nie zobaczyłem tej odpowiedzi, dopóki nie zamknąłem kilku innych okien i nie zauważyłem, że nadal jest w różnicy. Potem upewniłem się, że nie opublikowałem odpowiedzi dupe, więc +1 :)
codeMagic
1
@codeMagic Git 2.23 (III kwartał 2019 r.) uniknie tej pułapki. Zobacz moją odpowiedź poniżej
VonC
9

Miałem ten sam problem. Jak to rozwiązałem:

  1. Otwórz „Menedżer zadań”
  2. Zakończ zadanie „Explorer.exe”
  3. Kliknij „Plik” -> Utwórz nowe zadanie - Wpisz „explorer.exe” -> OK
  4. Oczyść mój projekt i działa
użytkownik10991945
źródło
Musiałem także zrestartować proces Explorer z Menedżera zadań. W moim przypadku widziałem plik „problematyczny” w obszarze „Podgląd” Eksploratora. Wydaje się to również blokować pliki od czasu do czasu bez ich zwalniania. Zamknięcie wszystkich okien Eksploratora nie pomogło. Musiałem ponownie uruchomić proces.
gehho
Wreszcie! Dziękuję Ci.
TheJack
6

Czy korzystasz z oprogramowania antywirusowego? Możliwe, że oprogramowanie AV (lub inne oprogramowanie) odczytywało plik przy użyciu interfejsów API mapowania plików, co spowodowało problem.

Eoin Campbell
źródło
6

W moim przypadku musiałem zabić MSBuild.exeproces zawieszania , który blokował plik (był tam nawet po zamknięciu programu Visual Studio).

t3chb0t
źródło
1
Udało wam się. Wielkie dzięki!
Larry,
4

Usunięcie folderu obj i przebudowanie działało dla mnie

Colmde
źródło
3

Miałem ten sam problem. Ponowne uruchomienie nie działało dla mnie. W menedżerze zadań działał proces o nazwie VBSCompiler. Musiałem zakończyć proces, aby naprawić ten błąd.

Nirjhar Vermani
źródło
Możesz także wyczyścić swoje rozwiązanie i spróbować ponownie
Nirjhar Vermani
3

Żadne z zamieszczonych tutaj rozwiązań nie działało dla mnie. To był devenv.exe (Visual Studio) blokujący plik, ale gdybym go ponownie uruchomił, ponownie go zablokuje.

Dziwnie, system Windows nie pozwolił mi usunąć plików (do Kosza), ale Shift + Delete (trwałe usunięcie) działał.

makhdumi
źródło
2

Zamknij program Visual Studio i uruchom go jako administrator. Naprawiono mój problem.

Sanjay Ghinaiya
źródło
Podczas tworzenia błyszczącej aplikacji w rstudio pojawiał się ten błąd, więc wiele z tych odpowiedzi nie było dla mnie pomocne. Ale zobaczyłem to i spróbowałem zrestartować rstudio jako administrator i zadziałało. Potem, gdy wróciłem do działania jako użytkownik, znów działało.
Paul
2

Rozwiązaniem było dla mnie zamknięcie wszystkich instancji VS i zabicie wszelkich wiszących procesów devenv.exe.

użytkownik2338408
źródło
2

Rozwiązaniem było dla mnie ponowne uruchomienie komputera.

ML13
źródło
2

W 2016 roku Andrew Cuthbert zauważył, że git diff blokuje również pliki, dopóki z niego nie wyjdziesz.

Tak nie będzie w przypadku Git 2.23 (III kwartał 2019 r.)

Zobacz commit 3aef54e (11 lipca 2019) autor: Johannes Schindelin ( dscho) .
(Połączone przez Junio ​​C Hamano - gitster- w commit d9beb46 , 25 lipca 2019)

diff: munmap()zawartość pliku przed uruchomieniem zewnętrznego mechanizmu różnicowego

Podczas uruchamiania zewnętrznego mechanizmu różnicowego, powiedzmy, a diff tool, można bezpiecznie założyć, że chcemy zapisać dane pliki.
W systemie Windows oznacza to, że nie może istnieć żaden inny proces trzymający otwarty uchwyt do wspomnianych plików, ani nawet tylko zmapowany region.

Upewnijmy git diffsię więc, że sam nie trzyma żadnego otwartego dojścia do danych plików.

W rzeczywistości, od razu wypuścimy parę plików, ponieważ diff zewnętrzny korzysta z plików, które właśnie napisaliśmy, więc nie musimy już przechowywać zawartości pliku w pamięci.

To naprawia git-for-windows # 1315

VonC
źródło
1

Widziałem te błędy podczas budowania aplikacji Dot Net za pomocą Anta.

W moim przypadku było to nasze korporacyjne oprogramowanie do tworzenia kopii zapasowych, Symantec DLO Agent. Wydaje się, że zatrzymanie go i wykluczenie katalogu z mojego oprogramowania antywirusowego oraz zamknięcie programu Visual Studio.

Robert Bratton
źródło
1

w moim przypadku usunąłem folder obj w katalogu głównym projektu i przebudowa projektu rozwiązała mój problem !!!

Ali Rasouli
źródło
0

Napotkałem ten błąd i okazało się, że FxCop działa przeciwko mojemu projektowi. Zamknąłem FxCop, a potem mogłem ponownie skompilować.

Tim
źródło
0

Jeśli jest to aplikacja internetowa, usuwanie plików w folderze tymczasowych plików ASP.NET może być rozwiązaniem.

superbohater
źródło
0

Jeśli korzystasz z profilerów takich jak AQ Time, mogą one również blokować plik. Rozwiązaniem w tym przypadku byłoby ponowne uruchomienie profilera lub po prostu rozładowanie / załadowanie danego zespołu z profilera. W przypadku AQ Time zauważyłem, że po pewnym czasie zwalnia plik, ale nie mogę przez całe życie powiedzieć, jaki jest limit czasu. Wydaje się być losowy

pamięć snu
źródło
0

Mam również ten sam błąd dzisiaj. Rozwiązałem ten problem, ponownie budując projekt.

Siva Sankar Gorantla
źródło
0

Miałem ten błąd spowodowany pozostawieniem uruchomionego w innej konsoli pliku „więcej” vs. Ups

Ade Jones
źródło
0

Żadne z powyższych nie rozwiązało tego problemu.

Ktoś miał jeden projekt w moim zestawie rozwiązań do używania procesora x64 w konfiguracji kompilacji. Zmiana na dowolny procesor spowodowała, że ​​kompilacja używa nowego folderu. Nadal nie wiem, który proces miał (ma) blokadę tego pliku.

CM
źródło
0

Miałem ten sam problem. Usunąłem dll z folderu tymczasowego, usunąłem dostęp tylko do odczytu, zrestartowałem komputer i uruchomiłem go.

Sarad Vishwakama
źródło
0

W moim przypadku po prostu zamykam wszystkie instancje i kopiuję folder główny aplikacji i wklejam go w innej lokalizacji, a następnie otwieram rozwiązanie w VS to działa ....

Appu
źródło
-1

Mój problem został również rozwiązany przez przesiewanie przez Process Explorer. Jednak proces, który musiałem zabić, to MySQL Notifier.exe, który nadal działał po zamknięciu wszystkich aplikacji VS i SQL.

JN88
źródło