仅对尝试部署的开发人员锁定文件

仅对尝试部署的开发人员锁定文件

我们的开发人员使用 VisualStudio 2017

他们使用我编写的 Post-Build PowerShell 函数将应用程序发布到正确的目的地。

有时(100 次中有 1 次)他们会收到以下错误:

Copy-Item : The process cannot access the file 'X:\xy\application.exe' because it is 
9>  being used by another process.

问题是 - 它未被其他进程使用。任何其他用户(例如我)都可以重命名目标中的文件、删除它或执行其他操作。

当开发人员重新启动计算机时,他就可以毫无问题地发布该应用程序。

所以在我看来,他的文件系统出了问题。我们试过了

taskkill /im explorer.exe /f && start "" explorer.exe但这并没有帮助。

如果开发人员使用他的资源管理器查看目标,即使我删除了目标文件,它仍然会出现在开发人员面前。

怎么会这样?我们该如何解决这个问题?

PowerShell 函数本身非常轻量。它基本上执行以下操作来部署:

Write-Host "Starting Copying files to $d"
$Copy = Copy-Item $FilesToPublish $d -Force -Recurse
Write-Host "Finished Copying files to $d"

如果指定(并且已指定),该函数还将删除目标的所有锁

Get-SmbOpenFile -CimSession $Session | ? { $_.Path -like "$EndPath*" } | Close-SmbOpenFile -Force -PassThru

但如果我们没有指定解锁,也会发生错误。

答案1

Robocopy 有一些选项可以重新复制丢失的文件。Hobocopy 的某些克隆即使在使用中也可以利用影子复制服务来复制文件。

https://www.raymond.cc/blog/copy-locked-file-in-use-with-hobocopy/

相关内容