我是通过Powershell以编程方式安装COM +代理组件,在msi上使用msiexec,然后使用COMAdmin.COMAdminCatalog对象在代理上设置远程服务器。
问题是新安装的代理需要一段时间才能在COMAdminCatalog的“Applications”集合中使用。有没有办法在获取应用程序列表之前强制刷新目录?
基本上,我所做的就是:
msiexec /q /i $appName.msi
使用COMAdmin.COMAdminCatalog
枚举应用。
function Set-Remote-Server-For-Complus-Application($appName, $remoteServer) {
$comAdmin = New-Object -comobject COMAdmin.COMAdminCatalog
$apps = $comAdmin.GetCollection("Applications")
$apps.Populate();
$app = $apps | Where-Object {$_.Name -eq $appName}
if ($app -eq $null) {
Write-Warning "Unable to find COM+ app ""$appName""."
Return
}
$app.Value("ApplicationProxyServerName") = $remoteServer
$result = $apps.SaveChanges()
$apps = $null
if ($result -eq 1) {
Write-Output "Successfully set complus remote server ""$remoteServer"" on ""$appName"""
}
}
问题是找不到应用程序。如果我在调用之间添加$app = $apps | Where-Object {$_.Name -eq $appName}
if ($app -eq $null) {
Write-Warning "Unable to find COM+ app ""$appName""."
Return
}
$app.Value("ApplicationProxyServerName") = $remoteServer
$result = $apps.SaveChanges()
$apps = $null
if ($result -eq 1) {
Write-Output "Successfully set complus remote server ""$remoteServer"" on ""$appName"""
}
,则可以正常工作。但是,睡觉并不好,因为有时它可能需要2秒以上,有时它可能只需要200毫秒,所以等待时间不必要很长。
有没有办法确保COMNmin.COMAdminCatalog在我尝试使用应用程序之前实际更新,而不是求助于睡眠而只是希望最好?