Der angeforderte Vorgang kann nicht für eine Datei ausgeführt werden, bei der ein vom Benutzer zugeordneter Abschnitt geöffnet ist


210

Immer wenn ich versucht habe, 4 Dateien in meinen bin-Ordner zu kopieren, wird nach dem Beenden des Hauptdienstes eine Fehlermeldung mit einer Datei (TexteDll) angezeigt. Der Fehler ist:

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

Dies kann an einer Systemverriegelung liegen. Oder vielleicht verwendet ein anderer Prozess diese DLL. Als ich gegoogelt habe, habe ich festgestellt, dass ein Neustart des Systems dies beheben kann.

Kann jemand eine Ursache oder Lösung dafür vorschlagen? Ich habe die Eigenschaften von TexteDll (allgemein, Version, Sicherheit usw.) überprüft. Alles scheint normal zu sein.



8
Es gibt tatsächlich viel mehr "Duplikate" der Frage (zum Beispiel: stackoverflow.com/questions/1818076/… ) - das Problem ist, dass jedes Mal, wenn die Grundursache etwas anderes ist.
MaciekTalaska

6
Versuchen Sie das nächste Mal, "Process Explorer" von der Microsoft-Website zu verwenden. Es hat eine Funktion namens "Find Handle". Durchsuchen Sie Ihre Datei dort und es wird Ihnen angezeigt, welcher Prozess ein Handle für diese Datei hat. Dann können Sie untersuchen, warum dieses Programm diesen Zugriff hat. Übrigens bedeutet das Beenden eines Dienstes nicht unbedingt, dass die ausführbare Datei, die den Host-Dienst hostet, beendet wird. Eine ausführbare Datei kann mehrere Dienste hosten. Im schlimmsten Fall werden viele .net-Dienste, die sehr viel Speicher belegen, nach der Freigabe des Speichers beendet, was manchmal Minuten nach dem Stoppereignis des Dienstes geschieht.
Erdogan Kurtur

3
Hehehe Visual Studio hat meine DLL gesperrt. Visual Studio geschlossen und versucht, die Lösung neu zu erstellen, und es hat funktioniert.
Leniel Maccaferri

Dies ist offensichtlich ein Gedächtniskonflikt. Einer bestimmten 'Instanz' des Objekts ist ein zugeordneter Bitspeicher zugeordnet, und später wird festgestellt, dass der ihm zugewiesene (statisch?) Speicher bereits an anderer Stelle zugeordnet wurde, wahrscheinlich mit einer anderen Ebene des Systemzugriffs.
Ouflak

Antworten:


177

In meinem Fall war es der Explorer, der die DLL sperrte, die im Debug-Ordner kompiliert wurde ... Seltsam, nicht wahr?

Ich habe es mit einem Tool namens Unlocker herausgefunden.

Musste mit Unlocker löschen, auch wenn gesagt wurde, dass es keine Sperre für die Datei gibt, und ich konnte den Ordner nicht löschen, bis ich diese einzelne Datei nicht gelöscht habe ...

Danach wurde es kompiliert.

BEARBEITEN:

Ich fand heraus, warum dies in meinem Fall geschah. Ich hatte die DLL in einem Texteditor in Visual Studio geöffnet ...


33
Ich hatte das dlo auch in einem meiner vielen visuellen Studiofenster geöffnet. Vielen Dank für die Veröffentlichung dieses Updates.
Ptfaulkner

3
Das Gleiche, irgendwie war die geänderte DLL in einem Textfenster im Editor geöffnet.
Harv

3
DLL auch in VS als Tab geöffnet! Danke dir!
Connell

5
Vollständige Offenlegung: Der Link zu "Unlocker" ist totale Spyware. Es werden alle Arten von Symbolleisten und Mist installiert, auch wenn Sie alle Kontrollkästchen deaktivieren, die besagen, dass Sie sie nicht wollen.
Tim

7
Verwenden Sie Process Explorer Instread von Unlocker. Sobald PE ausgeführt wird, gehen Sie zu Suchen -> Handle suchen oder DLL und fügen Sie den Namen der gesperrten Datei ein. Es wird angezeigt, welcher Prozess es gesperrt hat. Töte es, wenn du sicher bist, dass es in Ordnung ist und das Problem gelöst sein sollte.
Nikita G.

71
  • Wenn Sie auf eine Warnung über die Nichtübereinstimmung der referenzierten Baugruppenversion zwischen zwei oder mehr Projekten doppelklicken, vergessen Sie manchmal, das Fenster mit der Baugruppenansicht zu schließen, und es bleibt dort unter anderen Registerkarten. So wird die Baugruppe von VS selbst und gesperrt Ich habe ziemlich viel Zeit gebraucht, um das herauszufinden :)

    Sei vorsichtig mit der Leistung, die VS bietet;)

  • Ein weiteres Dummy-Szenario. Manchmal hilft es einfach, den gesamten obj-Ordner zu löschen oder nur die Datei zu warnen, da die gesperrte Datei bei diesem beschissenen Fehler hilft.

2
sortiert für mich ... Ich habe sogar einen Systemneustart durchgeführt, aber VS hat das Fenster mit der Baugruppenansicht erneut geöffnet. Das Schließen aller Registerkarten hat den Job erledigt. Prost
Dave Lawrence

35

Schließen Sie alle Dokumente in VS und versuchen Sie erneut, sie neu zu erstellen. Wenn es nicht funktioniert, starten Sie VS neu. Dieses Problem hängt mit der Sperre von DLL-Dateien zusammen.


3
das gleiche, einige Verrücktheit mit VS. Neustart sortiert es für mich.
PJUK

1
Das hat bei mir funktioniert. Seltsame Sache unter meinen besonderen Umständen. Ich hatte meine Exe eigenständig außerhalb der VS-Umgebung ausgeführt. Ich habe es über Nacht laufen lassen (Speichertest - es hat bestanden), es am Morgen heruntergefahren, ein paar kleine Codeänderungen vorgenommen und konnte meinen Build deswegen plötzlich nicht mehr beenden. Seltsam, wie diese Erinnerung so in Konflikt zu geraten schien.
Ouflak

Böse, danke, ein offenes Dokument hat den Fehler verursacht, was für eine BS!
Brian Ogden

"Alle Dokumente schließen" und Neuerstellung hat bei mir tatsächlich funktioniert! : o
Antoine Meltzheim

11

Schließen Sie Visual Studio, löschen Sie den Bin, debuggen Sie den Release-Ordner und starten Sie das Visual Studio-Projekt erneut. das hat mein Problem behoben


Das hat bei mir funktioniert! Vielen Dank! Ich habe die Verzeichnisse für alle Fälle umbenannt und es hat funktioniert.
DavidScherer


10

Ich bin Entwickler und mag keine Apps, die wie Unlocker in Registery injiziert wurden. Ich habe den SysInternals Process Explorer verwendet, der meine DLL gesperrt Find > Find Handle or Dll [Ctrl-F]und den Prozess abgebrochen hat .


1
Es wurde festgestellt, dass es von einem VS-Prozess gesperrt wurde, der beim Schließen von VS nicht gestorben ist.
Yoztastic

2
Selbst nachdem DevEnv geschlossen wurde und der Task-Manager es nicht zeigte, zeigte Process Explorer mehrere Instanzen von DevEnv Suspended an. Töte diese und es hat funktioniert.
DeclanMcD

1
Dies ist die richtigste Antwort, da sie zeigt, wie man findet, welcher Prozess die Datei sperrt, anstatt nur zu sagen "in meinem Fall lag es an X". Jeder Entwickler unter Windows würde davon profitieren, procexp und procmon zu seinem Toolbelt hinzuzufügen!
Matt Wanchap

9

Andere haben bereits festgestellt, dass dieser Fehler darauf zurückzuführen ist, dass eine andere Anwendung die Datei gesperrt hat. Ich wollte nur darauf hinweisen, dass git diffDateien ebenfalls gesperrt werden, bis Sie sie beenden. Das hat das in meinem Fall verursacht.


Gleiches Problem für mich. Ich habe vergessen, dass ich den Diff nicht verlassen habe. Leider habe ich diese Antwort erst gesehen, als ich ein paar andere Fenster geschlossen habe und festgestellt habe, dass sie sich immer noch in einem Unterschied befinden. Dann stellte ich sicher, dass ich keine betrogene Antwort postete, also +1 :)
codeMagic

1
@codeMagic Git 2.23 (Q3 2019) vermeidet diese Falle. Siehe meine Antwort unten
VonC

9

Ich hatte das gleiche Problem. Wie ich es gelöst habe war:

  1. Öffnen Sie "Task Manager"
  2. Aufgabe "Explorer.exe beenden"
  3. Klicken Sie auf "Datei" -> Neue Aufgabe erstellen - Geben Sie "explorer.exe" ein -> OK
  4. Reinigen Sie mein Projekt und es funktioniert

Ich musste auch den Explorer-Prozess über den Task-Manager neu starten. In meinem Fall hatte ich die "problematische" Datei im Bereich "Vorschau" des Explorers angezeigt. Dies scheint auch von Zeit zu Zeit Dateien zu sperren, ohne sie jemals freizugeben. Das Schließen aller Explorer-Fenster hat nicht geholfen. Musste den Prozess neu starten.
gehho

Schließlich! Danke dir.
TheJack

6

Führen Sie eine Antivirensoftware aus? Möglicherweise hat die AV-Software (oder eine andere Software) die Datei mithilfe der Dateizuordnungs-APIs gelesen, die das Problem verursacht haben.


6

In meinem Fall musste ich einen hängenden MSBuild.exeProzess beenden, der die Datei sperrte (er war auch nach dem Schließen von Visual Studio vorhanden).


1
Du hast den Nagel auf den Kopf getroffen. Vielen Dank!
Larry

4

Das Löschen des obj-Ordners und das Wiederherstellen haben bei mir funktioniert


3

Ich hatte das gleiche Problem. Neustart hat bei mir nicht funktioniert. Im Task-Manager wurde ein Prozess namens VBSCompiler ausgeführt. Ich musste den Prozess beenden, um diesen Fehler zu beheben.


Sie können auch Ihre Lösung reinigen und es erneut versuchen
Nirjhar Vermani

3

Keine der hier veröffentlichten Lösungen hat bei mir funktioniert. Es war devenv.exe (Visual Studio), das die Datei sperrte, aber wenn ich sie neu startete, wurde sie erneut gesperrt.

Seltsamerweise ließ Windows mich die Dateien nicht löschen (in den Papierkorb), aber Umschalt + Löschen (permanentes Löschen) funktionierte.


2

Schließen Sie das Visual Studio und führen Sie es als Administrator aus. Es ist mein Problem behoben.


Ich habe diesen Fehler beim Erstellen einer glänzenden App in rstudio erhalten, daher waren viele dieser Antworten für mich nicht hilfreich. Aber ich habe das gesehen und versucht, rstudio als Administrator neu zu starten, und es hat funktioniert. Als ich dann wieder als Benutzer lief, funktionierte es wieder.
Paul

2

Die Lösung für mich bestand darin, alle Instanzen von VS zu schließen und alle hängenden devenv.exe-Prozesse zu beenden.


2

Die Lösung für mich war, den Computer neu zu starten.


2

Es wurde darauf hingewiesen , im Jahr 2016 von Andrew Cuthbert , dass git diff Sperren - Dateien sowie , bis Sie davon verlassen werden.

Dies wird bei Git 2.23 (Q3 2019) nicht der Fall sein.

Siehe Commit 3aef54e (11. Juli 2019) von Johannes Schindelin ( dscho) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit d9beb46 , 25. Juli 2019)

diff: munmap()Dateiinhalt vor dem Ausführen von externem Diff

Wenn Sie ein externes Diff ausführen, z. B. a diff tool, können Sie davon ausgehen, dass wir die betreffenden Dateien schreiben möchten.
Unter Windows bedeutet dies, dass es keinen anderen Prozess gibt, der ein offenes Handle für diese Dateien oder nur einen zugeordneten Bereich enthält.

Stellen wir also sicher, dass git diffselbst kein offenes Handle für die betreffenden Dateien vorhanden ist.

Tatsächlich werden wir das Dateipaar sofort freigeben, da der externe Diff die gerade geschriebenen Dateien verwendet, sodass wir den Dateiinhalt nicht mehr im Speicher halten müssen.

Dies behebt Git-for-Windows # 1315


1

Ich habe diese Fehler beim Erstellen von Dot Net-Anwendungen mit Ant gesehen.

In meinem Fall war es unsere Unternehmens-Backup-Software, der Symantec DLO Agent. Das Stoppen und Ausschließen des Verzeichnisses in meiner Antivirensoftware und das Schließen von Visual Studio scheint zu funktionieren.


1

in meinem Fall den obj-Ordner im Projektstamm gelöscht und das Projekt neu erstellt hat mein Problem gelöst !!!


0

Ich bin auf diesen Fehler gestoßen und es stellte sich heraus, dass das Problem darin bestand, dass FxCop für mein Projekt ausgeführt wurde. Ich habe FxCop geschlossen und konnte dann wieder kompilieren.


0

Wenn es sich um eine Webanwendung handelt, kann das Löschen von Dateien im Ordner "Temporäre ASP.NET-Dateien" eine Lösung sein.


0

Wenn Sie Profiler wie AQ Time verwenden, sperren diese möglicherweise auch die Datei. In diesem Fall besteht die Lösung darin, den Profiler neu zu starten oder die betreffende Baugruppe einfach aus dem Profiler zu entladen / zu laden. Für AQ Time habe ich festgestellt, dass die Datei nach einiger Zeit veröffentlicht wird, aber ich kann für mein ganzes Leben nicht sagen, wie hoch diese Zeitüberschreitung ist. Scheint zufällig zu sein


0

Ich habe heute auch den gleichen Fehler bekommen. Ich habe dieses Problem behoben, indem ich das Projekt neu erstellt habe.


0

Ich hatte diesen Fehler, der durch eine fragliche "more" vs-Datei verursacht wurde, die in einer anderen Konsole ausgeführt wurde. Hoppla.


0

Keiner der oben genannten Punkte hat dieses Problem gelöst.

Jemand hatte ein Projekt in meiner Lösung so eingestellt, dass es x64-CPU in der Build-Konfiguration verwendet. Das Ändern in eine beliebige CPU führte dazu, dass der Build einen neuen Ordner verwendete. Ich weiß immer noch nicht, welcher Prozess diese Datei gesperrt hat (hat).


0

Ich hatte das gleiche Problem. Ich habe die DLL aus dem temporären Ordner entfernt, den schreibgeschützten Zugriff entfernt und den Computer neu gestartet und zum Laufen gebracht.


0

In meinem Fall schließe ich einfach alle Instanzen und kopiere meinen Stammanwendungsordner und füge ihn an einer anderen Stelle ein. Dann öffne ich die Lösung in VS, es funktioniert ....


-1

Mein Problem wurde auch durch Durchsuchen des Prozess-Explorers gelöst. Der Prozess, den ich beenden musste, war jedoch die MySQL Notifier.exe, die nach dem Schließen aller VS- und SQL-Anwendungen noch ausgeführt wurde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.