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

Sim*_*onS 5 windows powershell filesystems deployment

我们的开发人员使用 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.
Run Code Online (Sandbox Code Playgroud)

问题是 - 它没有被另一个进程使用。任何其他用户(例如我)可以重命名目标中的文件,删除它或其他任何。

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

所以在我看来,他的文件系统搞砸了一些事情。我们尝试了

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"
Run Code Online (Sandbox Code Playgroud)

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

Get-SmbOpenFile -CimSession $Session | ? { $_.Path -like "$EndPath*" } | Close-SmbOpenFile -Force -PassThru
Run Code Online (Sandbox Code Playgroud)

但是如果我们不指定解锁也会发生错误。

小智 0

Robocopy 有一些选项可以重做丢失文件的副本。Hobocopy 某种克隆可以利用卷影复制服务来复制文件,即使文件正在使用中也是如此。

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