我有一份詹金斯的工作,它做以下活动。
- 停止WebService
- 删除WebService
- 将项目从Jenkins工作区复制到服务器路径
- 创建WebService
- 启动WebService
下面是我的PowerShell脚本:
Get-ChildItem "C:Location*"
$service = Get-Service -Name value -Computername $env:SERVER -ErrorAction SilentlyContinue
sc.exe \$env:SERVER stop value
Write-Host "value STOPPED"
sc.exe \$env:SERVER delete val
Write-Host "val DELETED"
Copy-Item "C:Location*" "\$env:SERVERd$Location" -Force -Recurse
sc.exe \$env:SERVER create val start=auto DisplayName ="val" binPath= D:Location.exe
sc.exe \$env:SERVER description value"value"
sc.exe \$env:SERVER start value
Write-Host "value STARTED"
if ($error) { exit 1 }
错误日志:
复制项:进程无法访问文件"\\Location",因为另一个进程正在使用该文件。位于C:\Users\Administrator\AppData\Local\Temp\hudson205984936352103941。ps1:18 char:5+复制项目"C:\Location\*"。。。+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+类别信息:未指定:(:)[复制项],IOException+FullyQualifiedErrorId:System.IO.IOException,Microsoft.PowerShell.Commands.CopyItemCommand[SC]创建服务失败1072:指定的服务已标记为删除。[SC]ChangeServiceConfig2失败1072:指定的服务已标记为删除。[SC]启动服务失败1058:该服务无法启动,可能是因为它被禁用,也可能是因为没有启用了与其关联的设备。
您能帮我解决这个错误吗?我是否需要重新启动部署服务器,以便终止我的进程?如果是这样的话,我觉得这是不相关的,不能在prod服务器中执行。
问题是您有另一个进程正在使用dll。由于它正在被使用,您无法将其删除。在删除它之前,您需要确保没有进程正在使用您的dll。要实现这一点,您需要找出哪个进程正在使用它,它为什么使用它,并确保它将被关闭。如果下次也出现问题,那么您需要将关闭该进程添加到脚本中。