2009-07-24 53 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

相关问题