2009-07-24 19 views
1

Verwandte löschen: How to force delete a file?Wie Netzwerk ausführbare Dateien im Einsatz während NAnt Build-

Ich habe einen NAnt Skript, das macht einen vollständigen Build und Deployment auf unsere Dev-Umgebung. Die Bereitstellung der C# .Net Win exe und ihrer verwendeten DLLs beinhaltet das Verschieben der Dateien an einen Netzwerkspeicherort, wo sie von unseren Testern und anderen Entwicklern ausgeführt werden.

<copy todir="${dest.dir}" overwrite="true" failonerror="false" > 
     <fileset basedir="${source.dir}" > 
      <include name="**/*" /> 
     </fileset> 
    </copy> 

Gerade jetzt, ruft das Skript die Aufgabe kopieren, mit Überschreiben = „true“, aber das schlägt fehl, wenn jemand die Anwendung ausgeführt wird, Reporting

nicht ‚source.dll‘ kopieren Kann 'dest.dll'. Der Zugriff auf den Pfad 'dest.dll' wird verweigert.

"dest.dll" ist eine der wichtigsten EXE-Abhängigkeiten, die mitkopiert werden. Im Moment habe ich eine von zwei Möglichkeiten: Entweder ich finde heraus, wer sie geöffnet hat und bitte sie, aufzuhören, oder ich sende eine E-Mail an unsere Systemingenieure und sie machen etwas Voodoo, um die gesperrte Datei zu löschen. Kann ich trotzdem etwas von meinem eigenen Voodoo in das NAnt-Skript einbauen, damit die Dateikopie immer gelingt?

Antwort

1

Sie haben ein paar mögliche Optionen.

Eine wäre, eine benutzerdefinierte NAnt-Task zu schreiben, die P/Invoke verwendet, um die Methoden UnlockFile oder UnlockFileEx von der Win32-API aufzurufen. Diese Aufgabe könnte die Entsperr- und Kopiervorgänge umbrechen, sodass Sie Ihre neue Aufgabe nur über das NAnt-Skript aufrufen müssen.

Eine andere wäre, die NAnt-Exec-Task zu verwenden und eine Befehlszeilen-Unlock-Utility auszuführen, bevor versucht wird, zu kopieren.

+0

Das Problem damit ist, dass nur für Prozesse auf dem lokalen Computer funktioniert. Ich glaube nicht, dass UnlockFile die Datei von einem anderen Benutzer in einer anderen Box entsperren könnte. – Dov

+0

Sie können sich einige der Dienstprogramme von SysInternals anschauen - http://technet.microsoft.com/en-us/sysinternals/default.aspx, um zu sehen, ob es Befehlszeilen-Dienstprogramme gibt, die Sie verwenden können, die auf Remote funktionieren Computers. –

+0

Es scheint, als ob einer dieser Dienstprogramme der einzige Weg gewesen wäre, es zu tun, aber ich gab im Grunde auf. – Dov

Verwandte Themen