Вывод программы перенаправляется в файл, но файл остается заблокированным в течение некоторого времени после завершения программы

314
François Beaune

Эта проблема

Когда я запускаю следующую команду в командной строке:

devenv /? > out.txt & del out.txt 

Я получаю следующую ошибку:

The process cannot access the file because it is being used by another process. 

Это минимальное повторное решение проблемы в гораздо большем сценарии сборки .

Об этой проблеме сообщили несколько пользователей сценария сборки. У некоторых пользователей всегда есть проблема, у некоторых - нет.

Что такое devenv?

devenvссылается на devenv.comнебольшую внешнюю утилиту, которая вызывает devenv.exeосновной исполняемый файл Visual Studio IDE. Подробнее в статье MSDN Командная строка Devenv .

Когда devenv.exeвызывается без аргументов, он открывает IDE Visual Studio. Когда devenv.exeвызывается с правильными аргументами, он может создавать программы в командной строке. В обоих случаях devenv.exeвозвращается сразу.

Тем не менее, devenv.comбудет ждать, пока devenv.exeне почти закончена, но это, кажется, немного прекратить раньше, и devenv.exeдо сих пор работает и outputing сообщения, вызывает ошибку.

Вопрос

Как я могу надежно предотвратить возникновение этой ошибки? Добавление паузы (например, timeout 2сразу после вызова) devenv- это все, о чем я могу думать прямо сейчас.

Может быть, есть способ обернуть devenvкоманду во что-то, что возвращает управление только после полного завершения команды?

Среда

  • Microsoft Windows версия 10.0.17134.165
  • Microsoft Visual Studio 2017 версия 15.0.27703.2035

РЕДАКТИРОВАТЬ: проблема возникает, даже если команды запускаются из пакетного сценария (в соответствии с https://superuser.com/a/908744/404097, это похоже на соответствующие детали.)

0

0 ответов на вопрос