Vbscript VBS:ActiveX组件can';t创建对象:';Citrix.ICAClient';64位错误

Vbscript VBS:ActiveX组件can';t创建对象:';Citrix.ICAClient';64位错误,vbscript,32bit-64bit,citrix,Vbscript,32bit 64bit,Citrix,我有一个脚本,用于查找所有打开的Citrix连接,并断开与登录到Windows的用户无关的任何连接(Citrix Web界面连接)。它在32位机器(XP或7)上工作得非常好,但在64位机器上却不行。我知道它确实依赖于两个Citrix注册表键(AllowLiveMonitoring和AllowSimulationAPI)和WfIcaLib.dll,它们将位于不同体系结构的不同位置。我以为这是我的脚本和64位的问题,但是当我从32位机器上卸载接收器时,我得到了同样的错误。当我重新安装时,错误消失了。

我有一个脚本,用于查找所有打开的Citrix连接,并断开与登录到Windows的用户无关的任何连接(Citrix Web界面连接)。它在32位机器(XP或7)上工作得非常好,但在64位机器上却不行。我知道它确实依赖于两个Citrix注册表键(AllowLiveMonitoringAllowSimulationAPI)和WfIcaLib.dll,它们将位于不同体系结构的不同位置。我以为这是我的脚本和64位的问题,但是当我从32位机器上卸载接收器时,我得到了同样的错误。当我重新安装时,错误消失了。没有特殊的安装开关或方法,只是定期安装3.4.300接收器。因此,尽管它必须与64位相关,但它与Citrix相关,而不仅仅是VBScript代码

这是我的脚本,Set icaClient=CreateObject(“Citrix.icaClient”)行是它出错的地方

提前谢谢。 布莱恩

选项显式
Dim strWindowsUser
Dim-icaClient
暗会话句柄
暗淡的数字
模糊会话ID
Dim sessionInfo
模糊ct
暗淡的无线网络
'获取登录的通用Windows用户的名称
设置wshNetwork=WScript.CreateObject(“WScript.Network”)
strWindowsUser=wshNetwork.UserName
'当下一个用户登录到工作站时,请查找
'Citrix会话未绑定到通用Windows用户并断开连接
"会议结束了。
'如果不想断开连接,请按如下所示使用注销命令:
'icaClient.Logoff()
设置icaClient=CreateObject(“Citrix.icaClient”)
sessionHandle=icaClient.EnumerateCmSessions()
numSessions=icaClient.GetEnumNameCount(会话句柄)x
对于ct=0到numSessions-1
sessionID=icaClient.GetEnumNameByIndex(sessionHandle,ct)
icaClient.StartMonitoringCCMSession会话ID,True
'会话服务器=0,
'SessionUsername=1
'SessionDomain=2
sessionInfo=icaClient.GetSessionString(1)
如果lcase(sessionInfo)lcase(strWindowsUser),那么
icaClient.Disconnect()
如果结束
icaClient.StopMonitoringCCMSession会话ID
下一个
icaClient.CloseEnumHandle会话句柄

尝试手动指定64位cscript.exe

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

我没有一台机器可以试穿,但这是过去对我有用的东西

编辑:测试您的代码,它在硬编码64位cscript时工作。我正在使用Windows8.1(x64)和Receiver 4.2(ICA客户端14.2)



谢谢你指出这一点。我有一种感觉,这是由于其他帖子有相同的错误,但一些帖子建议,这可能是其他事情。是否可以从VBS本身中调用64位版本的cscript?这样我就可以在脚本中创建login来检测是32位还是64位,然后运行相应的版本。这就是它起作用的原因。仅存在32位WfIcaLib.dll,此类库没有64位,64位进程无法加载32位dll。这就是为什么我们要运行32位cscript-frorm-SysWOW64。
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
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>