Quando executo o seguinte comando em um prompt de comando:
devenv /? > out.txt & del out.txt
Eu recebo o seguinte erro:
The process cannot access the file because it is being used by another process.
Este é um caso de reprodução mínima para um problema em um script de criação muito maior .
Esse problema foi relatado por vários usuários do script de construção. Alguns usuários sempre têm o problema, alguns nunca têm isso.
devenv
? devenv
refere-se a devenv.com
, um pequeno utilitário de front-end que invoca devenv.exe
, o principal executável do IDE do Visual Studio. Mais detalhes no artigo do MSDN Comutadores de linha de comando Devenv .
Quando devenv.exe
é invocado sem argumentos, ele abre o IDE do Visual Studio. Quando devenv.exe
é invocado com os argumentos certos, ele pode construir programas na linha de comando. Em ambos os casos, devenv.exe
retorna imediatamente.
No entanto, devenv.com
esperará até que devenv.exe
tenha quase concluído, mas parece terminar um pouco antes e devenv.exe
ainda está em execução e emitindo mensagens, causando o erro.
Como eu poderia impedir de forma confiável esse erro? Adicionar uma pausa (por exemplo, timeout 2
) logo após a invocação de devenv
é tudo em que consigo pensar agora.
Talvez haja uma maneira de agrupar o comando devenv
em algo que retorne o controle somente quando o comando foi totalmente encerrado?
EDIT: O problema ocorre mesmo se os comandos forem executados a partir de um script em lote (de acordo com o link , isso parece um detalhe relevante.)