2014-10-08 58 views
0

对于Citrix而言,我知道得很少(如果我错了,请纠正我),它为citrix服务器的每个并发用户运行单独的windows副本,以及所有应用程序等。计算Citrix上的独特用户?

如果部署我已写入citrix服务器的应用程序,有什么办法可以告诉总共有多少用户?例如思捷可以给我一个客户端工作站或用户帐户的唯一ID?还是我仅限于检测并发用户?

回答

1

这是对的,但不是真的。这不完全是Windows的完全独立副本。每个用户都有他们自己的“会话”,这是他们自己的唯一沙箱,并且有跨会话使用的共享服务。

我会谈论的所有东西并不是特定于Citrix的。这是Windows标准的东西,如果你的用户是RDP到服务器,也会适用。有一堆状态可供您查询:

  • 会话ID在会话的整个生命周期内都是唯一的(但随着时间的推移,会话来来去去,ID也被重用) 。这可能不是您的最佳选择,因为可以在同一台服务器上拥有多个会话的用户。要了解有关此API和其他API的更多信息,请查看远程桌面服务API:http://msdn.microsoft.com/en-us/library/aa383464(v=vs.85).aspx
  • 您可以查询当前用户身份,以便获取用户名,域等。只需使用标准身份API即可这个。

运行在会话中的任何应用程序都可以查询当前会话的上述状态。但是,如果您想查询在同一台服务器上运行的其他会话的状态,则需要本地管理员权限。因此,如果您想要某种通用机制,允许您的应用程序的任何实例确定服务器上有多少个唯一用户,那么您将不得不做大量工作。

E.g.创建一些额外的长期服务,让您的应用程序的所有实例都会报告它们存在,然后查询以获取当前唯一的用户数。

如果你想获得特定的Citrix,你可以使用类似于XenApp Powershell SDK的东西,但是根据你想要查询的内容,当前用户可能需要某种形式的Citrix场的委托管理权限。

这是一个散射枪的答案 - 我给你了一堆不同的东西来检查。没有关于您的用例的更多具体信息,很难挖掘更具体的细节。

+0

这是一个很好的答案,分散枪是我现在需要的。当然,查询用户身份的麻烦在于用户可以通过共享帐户进行欺骗。有没有办法解决?同样,从你说的话,'HKEY_CURRENT_USER'和'HKEY_LOCAL_MACHINE'中的注册表键仍然会做正确的事情,无论在RDP/Citrix/etc中工作吗?即'CURRENT_USER'是特定于当前用户的,而LOCAL_MACHINE'是由物理机器的所有用户共享的? – 2014-10-09 10:41:26

+1

是的,这些reg reg hives将按预期工作,在RDS/Citrix下运行并不会改变它们的工作方式。完全保护自己免受恶意用户的侵害是非常困难的。如果用户共享帐户对您来说确实是一个问题,那么您真正可以做的就是统计服务器上的并发会话。 – donovan 2014-10-10 00:09:41