0

У меня есть работа Jenkins, которая работает ниже.Copy-Item: процесс не может получить доступ к файлу

  1. Стоп WebService
  2. Удалить WebService
  3. Копирование элементов из Дженкинс рабочего пространства на пути сервера
  4. Создание WebService
  5. Начало 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 } 

Журналы ошибок:

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.

Можете ли вы помочь мне с этой ошибкой? Нужно ли мне перезапустить сервер развертывания, чтобы мой процесс был убит? Если это так, я считаю, что это не актуально и не может работать на серверах prod.

+0

просто найдите процесс, блокирующий dll, и остановите его до – 4c74356b41

+0

@ 4c74356b41 Я не могу найти какой-либо процесс с этим именем. – Kally

ответ

0

Проблема в том, что у вас есть другой процесс, который использует dll. Поскольку он используется, его нельзя удалить. Вы должны убедиться, что ни один процесс не использует вашу dll, прежде чем вы сможете его удалить. Чтобы достичь этого, вам нужно будет выяснить, какой процесс использует его, почему он использует его и убедиться, что он будет закрыт. Если проблема возникает и в следующий раз, тогда вам нужно будет добавить закрытие этого процесса в ваш скрипт.

+0

Не могли бы вы рассказать мне, как достичь этого – Kally

+0

@ Просмотрите список процессов, создайте список процессов, в которых вы не можете исключить использование dll. Попытайтесь остановить их один за другим и посмотреть, когда вы можете удалить DLL. Когда вы сможете это сделать, вы также узнаете, какой процесс вызвал проблему. На этом этапе скопируйте dll и перезапустите процесс, чтобы воспроизвести проблему. Откорректируйте свой сценарий к вашим выводам и убедитесь, что он работает. –