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>