System.EnterpriseServices и Powershell Loll DLL - PullRequest
       24

System.EnterpriseServices и Powershell Loll DLL

0 голосов
/ 03 сентября 2010

Я пытаюсь использовать System.EnterpriseServices для удаления компонента c # com +, замены dll и переустановки новой версии.

Проблема в том, что, когда я добираюсь до строки copy-item, скрипт всегда завершается ошибкой, потому что System.EnterpriseSerivces блокирует целевой файл. Если я разбью скрипт на две части, одна из которых вызывает UnistallAssembly, а вторая - выполняет копирование и вызывает InstallAssembly, все работает.

Есть идеи, как заставить system.enterpriseservices выпускать dll?

$comRoot = "C:\Comroot\"
[void][System.Reflection.Assembly]::LoadWithPartialName("System.EnterpriseServices")
[System.String]$applicationName = "My App Name";
[System.String]$typeLibraryName = $null;

$objAdmin = new-object -com COMAdmin.COMAdminCatalog
$objAdmin.ShutdownApplication("$applicationName");
$objAdmin = $null

$helper = New-Object System.EnterpriseServices.RegistrationHelper 
$helper.UninstallAssembly("$comRoot\$StepName.dll", $applicationName)
$helper = $null
$applicationName = $null
[gc]::collect() 
[gc]::WaitForPendingFinalizers()

"SOURCE : $BranchPath\Steps\$StepName\bin\Debug\"
"DESTINATION : $comRoot"
copy-item "$BranchPath\Steps\$StepName\bin\Debug\*$StepName*" -destination "$comRoot" -    force

$helper = New-Object System.EnterpriseServices.RegistrationHelper 
$helper.InstallAssembly("$comRoot\$StepName.dll", [ref] $applicationName, [ref]       $typeLibraryName, [System.EnterpriseServices.InstallationFlags]::ConfigureComponentsOnly);
"Install Complete <$typeLibraryName>"
Read-Host "Press any key to exit"

1 Ответ

0 голосов
/ 06 сентября 2010

Интересно, возможно ли удаление не завершено к тому времени, когда вы пытаетесь скопировать?То есть вызов UninstallAssembly синхронизирован или асинхронен?Один из способов обойти проблемы «используемый файл» - попытаться переименовать файл с помощью такого инструмента, как SysInternals MoveFile.exe , а затем установить новую версию.

...