如何删除NAnt Build期间使用的网络可执行文件

时间:2009-07-24 15:49:51

标签: c# windows networking filesystems nant

  

相关:How to force delete a file?

我有一个NAnt脚本,可以完全构建和部署到我们的Dev环境。部署C#.Net Win exe及其使用的DLL涉及将它们移动到网络位置,我们的测试人员和其他开发人员运行它们。

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

现在,脚本调用Copy任务,Overwrite =“true”,但如果有人正在运行应用程序,报告

,则会失败
  

无法将'source.dll'复制到'dest.dll'。访问路径'dest.dll'被拒绝。

“dest.dll”是EXE的主要依赖项之一,随之复制。现在,我有两个资源中的一个:我要么弄清楚谁打开它并要求他们退出,或者我发送电子邮件给我们的系统工程师,他们做了一些巫术删除锁定的文件。无论如何我可以将我自己的一些伏都教纳入NAnt脚本,所以文件副本总是成功吗?

1 个答案:

答案 0 :(得分:1)

您有几种可能的选择。

一种方法是编写一个自定义的NAnt任务,该任务使用P / Invoke从Win32 API调用UnlockFileUnlockFileEx方法。此任务可以包装解锁和复制操作,因此您只需要从NAnt脚本调用新任务。

另一种方法是在尝试复制之前使用NAnt exec任务并执行命令行解锁功能。