0

아래 작업을 수행하는 Jenkins 작업이 있습니다.복사 항목 : 프로세스가 파일에 액세스 할 수 없습니다.

  1. 정지 WebService에
  2. 삭제 WebService에
  3. 서버 경로에 젠킨스 작업 공간에서
  4. 항목 복사
  5. WebService에에게
  6. 시작 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:SERVER\d$\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 } 
은(210)

오류 로그 :

Copy-Item : The process cannot access the file '\\Location' because it is being used by another process. 
At C:\Users\Administrator\AppData\Local\Temp\hudson2059984936352103941.ps1:18 char:5 
+  Copy-Item "C:\Location\*" " ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [Copy-Item], IOException 
    + FullyQualifiedErrorId : System.IO.IOException,Microsoft.PowerShell.Commands.CopyItemCommand 

[SC] CreateService FAILED 1072: 

The specified service has been marked for deletion. 

[SC] ChangeServiceConfig2 FAILED 1072: 

The specified service has been marked for deletion. 

[SC] StartService FAILED 1058: 

The service cannot be started, either because it is disabled or because it has no 
enabled devices associated with it.

가이 오류 좀 도와 주시겠습니까? 프로세스가 종료되도록 배포 서버를 다시 시작해야합니까? 그렇다면 나는 이것이 관련이 없으며 찌르다 서버에서 할 수 없다고 생각합니다.

+0

그냥 dll을 차단하는 프로세스를 찾아서 중지하십시오. – 4c74356b41

+0

@ 4c74356b41 해당 이름의 프로세스를 찾을 수 없습니다. – Kally

답변

0

문제는 dll을 사용하는 다른 프로세스가 있다는 것입니다. 사용 중이므로 제거 할 수 없습니다. 제거하기 전에 dll을 사용하는 프로세스가 없는지 확인해야합니다. 이를 수행하려면 어떤 프로세스가이 프로세스를 사용하고 있는지, 왜 사용하고 있는지, 그리고 프로세스가 닫혀 있는지 확인해야합니다. 다음 번에도 문제가 발생하면 해당 프로세스를 스크립트에 추가해야합니다.

+0

이것을 달성하는 방법을 알려주시겠습니까 – Kally

+0

@Blave는 프로세스 목록을보고 dll 사용을 제외 할 수없는 프로세스 목록을 만듭니다. 그들을 하나씩 멈추고 dll을 언제 제거 할 수 있는지보십시오. 그렇게 할 수있을 때 어떤 프로세스가 문제를 일으켰는지 알게됩니다. 이 시점에서 dll을 다시 복사하고 프로세스를 다시 시작하여 문제를 재현하십시오. 결과에 맞게 스크립트를 조정하고 제대로 작동하는지 확인하십시오. –