Die Programmausgabe wurde in eine Datei umgeleitet, die Datei bleibt jedoch nach Beendigung des Programms für einen Bruchteil der Zeit gesperrt

361
François Beaune

Das Problem

Wenn ich den folgenden Befehl in einer Eingabeaufforderung ausführen:

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

Ich erhalte folgende Fehlermeldung:

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

Dies ist ein minimaler Repro-Fall für ein Problem in einem viel größeren Build-Skript .

Dieses Problem wurde von mehreren Benutzern des Erstellungsskripts gemeldet. Einige Benutzer haben immer das Problem, andere haben es nie.

Was ist devenv?

devenvbezieht sich auf devenv.comein kleines Front-End-Dienstprogramm, devenv.exedas die Hauptprogrammdatei von Visual Studio IDE aufruft . Weitere Informationen finden Sie im MSDN-Artikel Devenv-Befehlszeilenoptionen .

Wenn devenv.exeohne Argumente aufgerufen wird, wird die Visual Studio-IDE geöffnet. Wenn devenv.exemit den richtigen Argumenten aufgerufen wird, können Programme in der Befehlszeile erstellt werden. In beiden Fällen devenv.exekehrt sofort zurück.

Es devenv.comwird jedoch gewartet, bis devenv.exees fast zu Ende ist, aber es scheint etwas früher beendet zu werden und devenv.exeläuft immer noch und gibt Nachrichten aus, die den Fehler verursachen.

Frage

Wie kann ich diesen Fehler zuverlässig verhindern? Das Hinzufügen einer Pause (zB timeout 2) direkt nach dem Aufruf von devenvist alles, woran ich gerade denken kann.

Vielleicht gibt es eine Möglichkeit, den devenvBefehl in etwas einzubinden, das erst dann die Kontrolle zurückgibt , wenn der Befehl vollständig beendet ist?

Umgebung

  • Microsoft Windows Version 10.0.17134.165
  • Microsoft Visual Studio 2017 Version 15.0.27703.2035

BEARBEITEN: Das Problem tritt auch dann auf, wenn die Befehle von einem Batch-Skript ausgeführt werden (gemäß https://superuser.com/a/908744/404097 scheint dies ein relevantes Detail zu sein.)

0

0 Antworten auf die Frage