2009-07-24 24 views
1

相關:How to force delete a file?如何刪除網絡可執行文件在使用過程中楠構建

我有一個惡性腳本,做一個完整的構建和部署到我們的開發環境。部署C#.Net Win exe及其使用的DLL涉及將它們移動到網絡位置,我們的測試人員和其他開發人員在其中運行它們。

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

眼下,腳本調用的複製任務,以覆蓋=「真」,但如果有人正在運行的應用,報告

無法複製「source.dll」這個失敗'dest.dll'。訪問路徑'dest.dll'被拒絕。

「dest.dll」是主要EXE的依賴項之一,與它一起復制。現在,我有兩個資源之一:我要麼找出誰開放並要求他們退出,要麼發送電子郵件給我們的系統工程師,他們會做一些巫術來刪除鎖定的文件。無論如何,我可以將一些我自己的巫術納入NAnt腳本,所以文件複製總是成功?

回答

1

您有幾種可能的選擇。

可以編寫一個自定義NAnt任務,使用P/Invoke從Win32 API調用UnlockFileUnlockFileEx方法。這個任務可以包裝解鎖和複製操作,所以你只需要從NAnt腳本中調用你的新任務。

另一種方法是在嘗試複製之前使用NAnt exec任務並執行命令行解鎖實用程序。

+0

問題在於,它只適用於本地機器上的進程。我不認爲UnlockFile能夠從另一個盒子上的另一個用戶解鎖文件。 – Dov 2009-08-17 19:36:57

相關問題