VBS: компонент ActiveX не может создать объект: ошибка "Citrix.ICAClient" в 64-разрядной версии

У меня есть скрипт, который ищет все открытые соединения Citrix и отключает любые из них, которые не связаны с пользователем, вошедшим в Windows (соединения Citrix Web Interface). Он отлично работает на 32-битных компьютерах (XP или 7), но не на 64-битных. Я знаю, что это зависит от двух ключей Citrix reg (AllowLiveMonitoring & AllowSimulationAPI) и WfIcaLib.dll, которые будут находиться в разных местах на разных архитектурах. Я думал, что это что-то с моим сценарием и 64-битным, но когда я удаляю Receiver с 32-битного компьютера, я получаю ту же самую ошибку. И когда я переустанавливаю, ошибка исчезает. Никаких специальных переключателей или методов установки, просто обычная установка приемника 3.4.300. Таким образом, хотя он должен быть связан с 64-битной архитектурой, он связан с Citrix, а не только с кодом VBScript.

Вот мой сценарий, строка Set icaClient = CreateObject("Citrix.ICAClient") - это место, где он ошибается.

Заранее спасибо. Брайан

Option Explicit
Dim strWindowsUser
Dim icaClient
Dim sessionHandle
Dim numSessions
Dim sessionID
Dim sessionInfo
Dim ct
Dim wshNetwork

' Get the name of the generic Windows user logged in

Set wshNetwork = WScript.CreateObject("WScript.Network")
strWindowsUser = wshNetwork.UserName

' As the next user is logging into the workstation, look for any
' Citrix sessions not tied to the generic Windows user and disconnect
' the session. 
' If you don't want to disconnect, use a Logoff command as follows:
' icaClient.Logoff()

Set icaClient = CreateObject("Citrix.ICAClient")
sessionHandle = icaClient.EnumerateCCMSessions()
numSessions = icaClient.GetEnumNameCount(sessionHandle)x

For ct = 0 To numSessions - 1

sessionID = icaClient.GetEnumNameByIndex(sessionHandle, ct)
icaClient.StartMonitoringCCMSession sessionID, True

'SessionServer = 0,
'SessionUsername = 1
'SessionDomain = 2
sessionInfo = icaClient.GetSessionString(1)
If lcase(sessionInfo) <> lcase(strWindowsUser) Then
    icaClient.Disconnect()
End If

icaClient.StopMonitoringCCMSession sessionID 

Next

icaClient.CloseEnumHandle sessionHandle

1 ответ

Попробуйте вручную указать 64-битный cscript.exe

C:>% windir% \ syswow64 \ cscript.exe script.vbs

У меня нет машины, чтобы примерить это, но это то, что работало для меня в прошлом.

Изменить: Протестировал ваш код, и он работает при жестком кодировании 64-битного cscript. Я использую Windows 8.1 (x64) и Receiver 4.2 (ICA Client 14.2)


c:\tools>cscript.exe text.vbs
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

c:\tools\text.vbs(22, 1) Microsoft VBScript runtime error: ActiveX component can't create object: 'Citrix.ICAClient'

c:\tools>%windir%\syswow64\cscript.exe text.vbs
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

c:\tools>
Другие вопросы по тегам