我们的开发人员使用 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/