博客 | 见解 2017 年 3 月 2 日

欢迎来到公海710 如何使用 StoreFront SDK 在 Citrix StoreFront 3.9 中重写客户端名称

如何使用 StoreFront SDK 在 Citrix StoreFront 3.9 中重写客户端名称

在某些公司中,某些应用程序可能需要将用户的客户端名称(PC 名称)重写为特定名称,以便应用程序通过 XenApp 运行。对于 StoreFront,这可以使用 StoreFront SDK 来完成。 Simon Frost 在这里写了一篇很棒的博客文章,介绍如何使用 SDK 来完成此任务:

https://www.citrix.com/blogs/2015/07/01/rewriting-the-session-clientname-from-storefront/

该博文中指向 StoreFront SDK 的链接将带您访问 SDK 2.5。您需要下载最新版本的 SDK 3.0。当您尝试下载 StoreFront 独立更新时,它在哪里并不明显,因此这里是下载它的直接链接:

https://www.citrix.com/downloads/storefront-web-interface/sdks/storefront-30-web-api.html

所有 StoreFront 3.x 版本均支持 StoreFront SDK 3.0。如果使用 LTSR,Citrix 支持可能会要求您禁用任何自定义以进行故障排除,但除此之外,SDK 将在生产能力中正常工作。

让我们看看默认 StoreFront 部署下的会话是什么样的。我已经向自己发布了命令提示符。我使用 Web 浏览器或从 Windows Receiver 登录 StoreFront。启动它后,我输入“set”,可以看到所有环境变量。您可以看到 CLIENTNAME 变量设置为我启动 ICA 会话的客户端名称,在本例中是我的虚拟桌面:

这对大多数人来说都很好,但有些应用程序可能需要您添加前缀、后缀,甚至由于应用程序的编写方式而将 CLIENTNAME 变量完全重写为静态变量。换句话说,它在编写时可能没有考虑到多用户 (XenApp),或者在期望看到特定客户端名称时有一些许可要求。这时候 SDK 就派上用场了。

重要提示:将 CLIENTNAME 变量重写为您想要的任何内容的 SDK 自定义要求您在 StoreFront 中启用“覆盖 ICA 客户端名称”高级设置才能使其正常工作。此选项用于使用 Receiver for Web 生成的 ID 覆盖 .ica 启动文件中的客户端名称。稍后我们将在 web.config 中手动执行此操作,但如果您想通过 GUI 自行执行此操作,请在“高级设置”下进行:

如果您在选中此项的情况下从网络浏览器启动命令提示符,您将看到以下内容。您可以看到 CLIENTNAME 变量是“WR_”,后跟随机生成的 ID:

但是,如果您使用 Windows Receiver 启动,它会显示真实的客户端名称。这意味着,如果您使用 Windows Receiver,过滤器将按照您的意愿工作。如果您使用网络浏览器,那么它可能不完全是您正在寻找的内容,因为它将在其中添加生成的 ID,而不是实际的客户端名称。我稍后将在本文中展示这种比较。

让我深入探讨一下如何实现自定义。我有一个 2 节点 StoreFront 3.8 服务器组。我将使用 SDK 使用前缀重写 CLIENTNAME,然后是真实的客户端名称,最后添加后缀。然后我将更新到最新的 StoreFront 3.9 并演示如何重新应用自定义,因为它们不会持久保存 StoreFront 升级。

1。从上面下载 SDK 3.0 后,将其解压缩。你会看到一堆这样的文件夹:

2. If you navigate to StoreCustomizationSDK >文档“store-customization-sdk-guide.pdf”将介绍如何使用 SDK:

在此 PDF 中,您会发现以下是可用的项目,您可以使用 SDK 进行修改:

  • 枚举后 - 使用此修改资源枚举的结果。这使您可以更改资源的属性,并提供比使用 PowerShell cmdlet 按资源类型/关键字进行简单过滤更高级的过滤。
  • ICA 文件 - 使用此文件修改生成的 ICA 文件。例如,使用它来更改 ICA 虚拟通道参数并阻止用户访问其剪贴板。
  • HDX 路由 - 使用它来修改 NetScaler 网关的选择和/或执行地址转换以允许来自公司网络外部的 HDX 连接。
  • 会话后枚举——用它来修改会话枚举的结果;例如,过滤掉不需要的会话。
  • 访问条件(预启动和预枚举)- 使用它来修改影响资源可见性和启动资源的能力的访问条件。
  • 场集 - 使用此修改 StoreFront 将联系的 Delivery Controller(“场”)列表。
  • 设备信息 - 使用此信息修改客户端提供的设备信息,包括 ClientName 和 DeviceId。

3。导航到 StoreFront 商店的 bin 文件夹。在此示例中,我的商店被命名为默认的“商店”。请注意,这不是 StoreWeb 文件夹,因此不要在这里感到困惑。将有 4 个占位 DLL 文件,分别称为 StoreCustomization_Enumeration.dll、StoreCustomization_Input.dll、StoreCustomization_Launch.dll 和 StoreCustomization_SessionEnumeration.dll。将这 4 个 DLL/程序集文件复制到安全的地方作为备份。我们只会在下一步中覆盖其中一个,但最好备份所有这些内容,以防以后您想要进行其他自定义:

4。此时,您可以运行 Visual Studio 并按照指南所示创建自己的程序集,或者您也可以做简单的事情,只需使用 Simon 已经创建的“StoreCustomization_Input.dll”即可。它位于博客的一半左右,可通过他提供的 ShareFile 链接下载(https://citrix.sharefile.com/d-s3fe22c5036b4d3fa)。只需覆盖现有的即可C:inetpubwwwrootCitrixStorebin使用此自定义“StoreCustomization_Input.dll”。是的,它比 11 KB 占位符小:

 <appSettings />

5。现在转到上一个目录并打开 web.config。确保以“以管理员身份运行”打开记事本,然后打开 web.config。否则您将无法保存更改。查找 (Ctrl+F) 单词“appSettings”,您将看到此部分:

6。将此部分更改为如下所示。我的前缀是 ABC,然后是下划线,然后是客户端名称,然后是另一个下划线,最后是后缀 XYZ:

<appSettings>
<add key="clientNameRewriteRule" value="ABC_$N_XYZ" />
</appSettings>

完成后 web.config 应该如下所示:

7。现在以向上方向搜索单词“overrideIcaClientName”,因为它将位于 web.config 的顶部附近。默认情况下,它是“关闭”的,您需要将其切换为“打开”,如下所示:

8。现在保存您的 web.config 并执行 iisreset。 Web.config 更改通常不需要 iisreset 来启动,但为了安全起见,我喜欢这样做。打开 Windows Receiver 并从头开始登录。您必须确保没有打开的会话,否则您将看不到更改生效。启动命令提示符,然后检查 CLIENTNAME 变量。它应该具有 ABC 前缀和 XYZ 后缀,中间是真实的客户端名称:

9。现在打开一个私人浏览器窗口并尝试启动命令提示符并检查那里的变量。它将具有前缀,但具有生成的 ID,而不是真实的客户端名称。后缀甚至不知道,因为它被砍掉了。 CLIENTNAME 变量最多只能有 20 个字符,生成的 ID 会导致整个字符串太长:

这就是我在本文前面提到的行为。 Web 与 Windows Receiver 的表现会有所不同。如果您只是想要一个静态名称而不尝试插入 $N 变量,那么那就太好了,它会正常工作。但是,如果您确实在 web.config 中添加了 $N 变量,那么 CLIENTNAME 将根据用户选择启动其应用程序的方式而有所不同。

如果您必须有前缀和唯一的东西,那么只需使用 $U 变量,即用户的用户 ID。我也非常喜欢 $R 变量,它会告诉您它们是否来自 StoreFront(内部)与 NetScaler Gateway(外部)。您可以使用 Simon 在他的博客文章中引用的变量的任意组合,到目前为止,我在测试中几乎使用了所有这些变量。

10。现在,如果您像我一样运行 2 节点 StoreFront 服务器组,请在您要应用这些更改的 StoreFront 服务器上打开控制台并传播更改。

它会自动复制新的 web.config 和 StoreCustomization_Input.dll 文件。如果您通过 NetScaler 对 StoreFront 服务器进行负载平衡,那么现在是单独测试每个 StoreFront 服务器以验证它们是否按预期工作的好时机。只需一次禁用每台服务器即可完成此测试。

11。现在,我们将这个 2 节点 StoreFront 3.8 服务器组升级到 StoreFront 3.9。与往常一样,对您的虚拟机进行快照并禁用 NetScaler 上 StoreFront 的流量。这将有助于最大限度地减少 StoreFront 升级失败的可能性,因为繁忙的系统通常意味着安装程序无法继续,并且最终会导致升级失败。复制 web.config 和 StoreCustomization_Input.dll 文件。然后,您可以运行 3.9 的 CitrixStoreFront-x64.exe 安装程序。接受许可协议并点击下一步:

12。点击安装并等待,升级需要几分钟才能完成。

13。 3.9 安装程序为您提供了一些额外的步骤。升级完成后点击完成。

14。它将打开 StoreFront 控制台并告诉您服务器组已部分升级。

15。转到 bin 文件夹,您会看到占位符文件从 11 KB 变为 18 到 19 KB。所以基本上你的文件被覆盖了。

您需要将其从备份中复制回来。不要但是请使用 web.config 执行此操作。旧的 web.config 适用于 3.8,如果你覆盖 3.9 web.config,你将会遇到问题。如果您打开 3.9 web.config,您会注意到您所做的更改实际上已经持续存在,因此此时无需执行任何操作。如果您特别好奇,您可以随时在备份的 3.8 配置与 3.9 配置之间进行 Beyond Compare。现在升级第二个节点并再次传播更改。如果您愿意,您还可以在两个节点上执行 iisreset 以确保安全。

16。现在是时候进行测试了。您可以在此处看到我已从 Receiver for Windows 启动命令提示符,并且它正在完全按照预期重写:

并通过网络浏览器进行重写:

现在我们已经验证了 SDK 自定义设置如何在 StoreFront 版本升级之间保持不变。

希望本文能帮助您了解 StoreFront SDK 的工作原理。这是一个简单的例子,仅仅触及了表面。另外,如果您确实对使用 HTTP 标头值进行高级客户端名称重写感兴趣,请联系我的 CTP 同事山姆·雅各布斯。他有一些非常聪明的定制,他可能愿意与你分享。?

作者

作者头像 杰森·塞缪尔
分享

更多文章

见解
2026 年 4 月 27 日

当 Glean 需要 Snowflake 时:为什么企业 AI 仍然依赖于分析平台

安迪·奎林头像 安迪·奎林
公司
2026 年 4 月 23 日

Alchemy 技术集团收购 Iovations

皮特·唐宁头像 皮特·唐宁
见解
2026 年 4 月 11 日

Glasswing 项目和多样化代理 AI 策略的案例