A operação solicitada não pode ser executada em um arquivo com uma seção mapeada pelo usuário aberta


210

Sempre que eu tentava copiar 4 arquivos na minha pasta bin, após interromper o serviço principal, recebia um erro com um arquivo (TexteDll). O erro é:

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

Pode ser devido a algum bloqueio do sistema. Ou talvez outro processo esteja usando essa DLL. Quando pesquisei no Google, descobri que a reinicialização do sistema pode resolver isso.

Alguém pode sugerir uma causa ou solução para isso? Inspecionei as propriedades do TexteDll (geral, versão, segurança, etc.). Tudo parece normal.



8
na verdade, existem muito mais 'duplicatas' da pergunta (por exemplo: stackoverflow.com/questions/1818076/… ) - o problema é que toda vez que a causa raiz é algo diferente.
MaciekTalaska

6
da próxima vez, tente usar o "process explorer" do site da microsoft. Possui um recurso chamado "localizar identificador". procure seu arquivo lá e ele mostrará qual processo tem um identificador nesse arquivo. Então você pode começar a investigar por que esse programa tem esse acesso. BTW, interromper um serviço não significa necessariamente que o executável que hospeda o serviço será encerrado. Um executável pode hospedar vários serviços. Na pior das hipóteses, muitos serviços .net que usam grandes quantidades de memória tendem a terminar após liberar a memória que acontece algumas vezes minutos após o evento de interrupção do serviço.
Erdogan Kurtur

3
Hehehe Visual Studio estava bloqueando minha DLL. Fechou o Visual Studio e tentou reconstruir a solução e funcionou.
Leniel Maccaferri

Obviamente, isso é um conflito de memória. Uma 'instância' específica do objeto tem alguma memória de bit alocada mapeada e, posteriormente, descobre que a memória (estaticamente?) Alocada a ele, já foi mapeada em outro lugar, provavelmente com um nível diferente de acesso ao sistema.
ouflak

Respostas:


177

No meu caso, foi o Explorer que estava bloqueando a DLL que foi compilada na pasta Debug ... Estranho, não é?

Descobri usando uma ferramenta chamada Unlocker.

Tive que excluir com o Unlocker, mesmo quando dizia que não havia bloqueio no arquivo, e não pude excluir a pasta até não excluir esse único arquivo ...

Depois disso, compilou.

EDITAR:

Eu descobri por que no meu caso isso estava acontecendo. Eu tive a DLL aberta em um editor de texto dentro do Visual Studio ...


33
Também abri o dlo em uma das minhas muitas janelas do visual studio. Obrigado por postar essa atualização.
ptfaulkner

3
A mesma coisa, de alguma forma, a DLL danificada foi aberta em uma janela de texto no editor.
Harv

3
DLL aberta como uma guia no VS também! Obrigado!
quer

5
Divulgação completa: o link para "Unlocker" é um spyware total. Ele instala todos os tipos de barras de ferramentas e porcaria, mesmo se você desmarcar todas as caixas dizendo que não as deseja.
Tim

7
Use o Process Explorer em vez de Unlocker. Quando o PE estiver em execução, vá para Localizar -> Localizar Identificador ou DLL e cole o nome do arquivo bloqueado. Ele mostrará qual processo o bloqueou. Mate-o se tiver certeza de que está tudo bem e o problema deve ser resolvido.
Nikita G.

71
  • Às vezes, quando você clica duas vezes em um aviso sobre a incompatibilidade da versão de montagem referenciada entre dois ou mais projetos, você esquece de fechar a janela de exibição de montagem e ela permanece lá entre outras guias ... para que o assembly seja bloqueado pelo próprio VS e Demorei bastante tempo para descobrir isso :)

    Tenha cuidado com o poder que o VS fornece;)

  • Outro cenário fictício. Às vezes, basta excluir a pasta obj inteira ou apenas o arquivo avisado, pois a pasta bloqueada ajuda com esse erro de baixa qualidade.

2
classifiquei para mim ... Eu até fiz uma reinicialização do sistema, mas o VS reabriu a janela de exibição de montagem. Fechar todas as guias fez o trabalho. Cheers
Dave Lawrence

35

feche todos os documentos no VS e tente reconstruir novamente. Se não funcionar, reinicie o VS. Este problema está relacionado ao bloqueio de arquivos DLL.


3
mesmo, alguma estranheza com o VS. reiniciar classificou para mim.
PJUK

1
Isso funcionou para mim. Coisa estranha na minha circunstância particular. Eu havia executado meu exe de forma independente, fora do ambiente do VS. Deixei em execução durante a noite (teste de memória - passou), desligue-o de manhã, algumas pequenas alterações de código e, de repente, não consegui concluir minha compilação por causa disso. Estranho como essa memória parecia conflitar assim.
ouflak

Desagradável, obrigado, um documento aberto estava causando o erro, o que BS!
Brian Ogden

"Fechar todos os documentos" e a reconstrução realmente funcionaram para mim! : o
Antoine Meltzheim 24/08/16

11

Feche o visual studio, exclua a lixeira, depure a pasta de lançamento e inicie o projeto do visual studio novamente. isso resolveu meu problema


Isso funcionou para mim! Obrigado! Renomeei os diretórios, apenas por precaução, e funcionou.
DavidScherer 30/08/19


10

Sou desenvolvedor e não gosto de aplicativos injetados no Registery como o Unlocker. Eu usei o SysInternals Process Explorer, que processou minha DLL Find > Find Handle or Dll [Ctrl-F]e matou o processo.


1
Constatou que estava bloqueado por um processo do VS que não morreu quando o VS foi fechado.
Yoztastic

2
Mesmo depois que o DevEnv foi fechado e o Gerenciador de Tarefas não o mostrou, o Process Explorer mostrou várias instâncias do DevEnv Suspended. Mate estes e funcionou.
DeclanMcD

1
Esta é a resposta mais correta, pois mostra como encontrar qual processo está bloqueando o arquivo, em vez de apenas dizer "no meu caso, era devido ao X". Todo desenvolvedor do Windows se beneficiaria da adição de procexp e procmon ao cinto de ferramentas!
Matt Wanchap

9

Outros já estabeleceram que esse erro ocorre devido a outro aplicativo ter um bloqueio no arquivo. Só queria salientar que git diffbloqueia arquivos também até você sair dele. Foi isso que causou isso no meu caso.


O mesmo problema para mim. Esqueci que eu não tinha desistido do diff. Infelizmente, eu não vi essa resposta até fechar um monte de outras janelas e vi que ela ainda estava em dificuldades. Em seguida, foi ter certeza que eu não postar uma resposta dupe tão +1 :)
codeMagic

1
O @codeMagic Git 2.23 (terceiro trimestre de 2019) evitará essa armadilha. Veja minha resposta abaixo
VonC

9

Eu tive o mesmo problema. Como eu resolvi isso foi:

  1. Abra o "Gerenciador de tarefas"
  2. Finalizar tarefa "Explorer.exe"
  3. Clique em "Arquivo" -> Criar nova tarefa - Digite "explorer.exe" -> OK
  4. Limpe meu projeto e ele funciona

Eu também tive que reiniciar o processo do Explorer no Gerenciador de tarefas. No meu caso, eu havia visualizado o arquivo "problemático" na área "Visualizar" do Explorer. Isso também parece bloquear arquivos de tempos em tempos, sem nunca liberá-los. Fechar todas as janelas do Explorer não ajudou. Teve que reiniciar o processo.
gehho

Finalmente! Obrigado.
TheJack

6

Você está executando algum software antivírus. É possível que o software AV (ou algum outro software) esteja lendo o arquivo usando as APIs de mapeamento de arquivos que causaram o problema.


6

No meu caso, tive que interromper um MSBuild.exeprocesso suspenso que estava bloqueando o arquivo (ele estava lá mesmo depois que fechei o Visual Studio).


1
Você acertou em cheio. Muito obrigado!
Larry

4

A exclusão da pasta obj e a reconstrução funcionaram para mim


3

Eu tive o mesmo problema. Reiniciar não funcionou para mim. Houve um processo chamado VBSCompiler em execução no gerenciador de tarefas. Eu tive que terminar o processo para corrigir este erro.


Você também pode limpar a sua solução e tente novamente
Nirjhar Vermani

3

Nenhuma das soluções postadas aqui funcionou para mim. Era devenv.exe (Visual Studio) bloqueando o arquivo, mas se eu o reiniciasse, ele seria novamente bloqueado.

Estranhamente, o Windows não me deixou excluir os arquivos (para a Lixeira), mas Shift + Delete (exclusão permanente) funcionou.


2

Feche o Visual Studio e execute-o como administrador. Está resolvido o meu problema.


Eu estava recebendo esse erro ao criar um aplicativo brilhante no rstudio, muitas dessas respostas não foram úteis para mim. Mas vi isso e tentei reiniciar o rstudio como administrador, e funcionou. Então, quando voltei a funcionar como usuário, ele funcionou novamente.
Paul

2

A solução para mim foi encerrar todas as instâncias do VS e eliminar qualquer processo pendente do devenv.exe.


2

A solução para mim foi reiniciar o computador.


2

Foi apontado em 2016 por Andrew Cuthbert que o git diff também bloqueia os arquivos até você sair dele.

Esse não será o caso do Git 2.23 (terceiro trimestre de 2019)

Veja commit 3aef54e (11 jul 2019) por Johannes Schindelin ( dscho) .
(Incorporado por Junio ​​C Hamano - gitster- in commit d9beb46 , 25 de jul de 2019)

diff: munmap()conteúdo do arquivo antes de executar o diff externo

Ao executar um diff externo de, digamos, a diff tool, é seguro assumir que queremos gravar os arquivos em questão.
No Windows, isso significa que não pode haver nenhum outro processo segurando um identificador aberto para esses arquivos, ou mesmo apenas uma região mapeada.

Então, vamos ter certeza de que git diff ele próprio não esteja mantendo nenhum identificador aberto para os arquivos em questão.

De fato, lançaremos o par de arquivos imediatamente, já que o diff externo usa os arquivos que acabamos de escrever, portanto não precisamos mais guardar o conteúdo do arquivo na memória.

Isso corrige o git-for-windows # 1315


1

Eu estava vendo esses erros ao criar aplicativos Dot Net com o Ant.

No meu caso, era o nosso software de backup corporativo, o Symantec DLO Agent. Parar e excluir o diretório no meu software antivírus e fechar o Visual Studio parece funcionar.


1

no meu caso excluiu a pasta obj na raiz do projeto e o projeto de reconstrução resolveu meu problema !!!


0

Eu encontrei esse erro e o problema era que o FxCop estava sendo executado no meu projeto. Fechei o FxCop e pude compilar novamente.


0

Se for um aplicativo Web, excluir arquivos na pasta Arquivos Temporários do ASP.NET pode ser uma solução.


0

Se você estiver usando perfis como o AQ Time, eles também podem estar bloqueando o arquivo. A solução nesse caso seria reiniciar o criador de perfil ou simplesmente descarregar / carregar o conjunto em questão do criador de perfil. No AQ Time, notei que ele está liberando o arquivo depois de algum tempo, mas não consigo dizer o que é esse tempo limite. Parece ser aleatório



0

Eu tive esse erro causado por um arquivo 'mais' vs em questão deixado em execução em outro console. Opa


0

Nenhuma das opções acima resolveu esse problema.

Alguém tinha um projeto em minha solução definido para usar a CPU x64 na configuração de compilação. Mudá-lo para Qualquer CPU fez com que a construção usasse uma nova pasta. Ainda não sei qual processo teve (tem) um bloqueio nesse arquivo.


0

Eu tive esse mesmo problema. Eu removi a dll da pasta temp, remova o acesso somente leitura e reiniciei a máquina e consegui funcionar.


0

No meu caso, eu apenas fecho todas as instâncias e copio minha pasta do aplicativo raiz e colo-a em um local diferente e, em seguida, abra a solução no VS, funciona ....


-1

Meu problema também foi resolvido examinando o Process Explorer. No entanto, o processo que tive que matar foi o MySQL Notifier.exe que ainda estava em execução após o fechamento de todos os aplicativos VS e SQL.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.