Citrix Virtual Apps and Desktops

故障排除

已发布应用程序的会话注销问题故障排除

发布应用程序时,仅指定已发布应用程序的主可执行文件。但是,某些应用程序可能会生成在后台运行的额外(子)进程,并且在主已发布应用程序关闭时,这些进程不会随相应的主可执行文件一起关闭。额外进程也可能由执行的脚本或特定的注册表项(例如 RunRunOnceKey)创建。这些应用程序可能会阻止正常注销,导致会话残留或挂起,并可能导致会话无法关闭以及用户无法注销。

在这种情况下,您需要使用 Citrix Director 重置或退出这些会话。

为帮助识别和解决会话未正确注销的问题,Citrix 提供了三个注册表项。识别和解决由于这些问题导致的会话未正确注销是一个三步过程:

  1. 识别哪些会话的已发布应用程序正在阻止正常注销

  2. 识别这些已发布应用程序是否生成任何额外(子)进程

  3. 将这些进程添加到指定的注册表项以防止它们阻止注销

步骤 2:识别这些已发布应用程序是否生成任何额外(子)进程

一旦确定某个已发布应用程序正在阻止正常注销,下一步就是确定此应用程序在运行时是否生成额外进程。

您可以读取 HKCU\Software\CitrixVolatile\Seamless\Sessions\[ID]\LogoffCheckerBlockingProcess 以确定在已发布应用程序关闭时是否有任何进程正在阻止正常注销。

在以下示例中,LogoffCheckerBlockingProcess 键包含以下条目:

PhoneExperienceHost.exe
SkypeApp.exe
SkypeBackgroundHost.exe
<!--NeedCopy-->

这些进程已阻止正常注销。

注意:

将 [ID] 替换为您要检查的会话的正确会话 ID。

步骤 3:将这些进程添加到指定的注册表项以防止它们阻止注销

您可以将这些进程添加到以下注册表项,以防止它们在将来的会话中阻止注销:

Add the process file name to the following registry key:
Caution! Refer to the Disclaimer at the end of this article before using the Registry Editor.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix\wfshell\TWI
Value Name:LogoffCheckSysModules
Type:REG_SZ
String:MyAppName.exe
<!--NeedCopy-->

有关 LogoffCheckSysModules 的更多信息,请参阅从已发布应用程序正常注销后会话仍处于活动状态

分步故障排除指南

  1. 在受测 VDA 下启动远程注册表服务:

    1. 在“控制面板”中,选择“管理工具”>“服务”。

    2. 右键单击“远程注册表服务”,然后选择“属性”。

    3. 在“启动类型”下,从下拉菜单中选择“自动”。

    已发布应用程序注册表

  2. 关闭受测 VDA 上的 Windows 防火墙,或创建入站防火墙规则以启用端口 455:

    1. 在“控制面板”中,选择“Windows Defender 防火墙”>“高级设置”。

    2. 右键单击“入站规则”,然后选择“新建规则”。

    3. 在“新建入站规则向导”中,选择“端口”。

    4. 在“协议和端口”页面上,选择“TCP 和特定本地端口”。输入 445 作为本地端口。

    5. 在“操作”页面上,选择“允许连接”。

      1. 选择要应用新入站规则的防火墙配置文件。
    1. 命名防火墙规则,然后选择“完成”以退出“新建入站规则向导”。

      已发布应用程序防火墙端口

  3. 从同一域中的另一台 VM(可以是 DC、DDC 或另一台 VDA)运行 Regedit 并连接到远程注册表。

    已发布应用程序注册表编辑器

  4. 输入受测 VDA 的 IP 地址,然后单击“确定”。regedit 树必须显示受测 VDA 的分支。

    已发布应用程序注册表编辑器

  5. 打开已发布的“命令提示符”应用程序。

    已发布应用程序管理

    命令提示符”应用程序显示在 Citrix Workspace 上。

    已发布应用程序命令提示符

  6. 在客户端上打开“连接中心”。这用于在关闭已打开的无缝应用程序后,监视会话何时注销。我们可以从下图中看到,命令提示符进程 c:\Windows\system32\cmd.exe 在远程 VDI 上处于活动状态。

    已发布应用程序连接

  7. 在运行 regedit 的 VDA 上,转到以下远程 IP 位置: HKEY_USERS\S-1-X-XX-XXXXXXXX-XXXXXXXXXXX-XXXXXXXXXX-XXXX\SOFTWARE\CitrixVolatile\Seamless\Sessions\X\

    注意:

    每次打开新会话时,此路径都会更改。

  8. 此处有两个要读取的注册表项(请勿在此处更改它们):LogoffCheckBlockingProcessLogoffCheckerBlockingVisibleProcess。这些注册表项显示任何阻止注销的程序。第一个必须显示 C:\Windows\System32\cmd.exe,因为它已打开但尚未关闭。

    注意:

    LogoffCheckBlockingProcessLogoffCheckerBlockingVisibleProcess 不得手动编辑。手动编辑这些注册表值可能会导致会话不稳定。

    Published app 2

  9. 单击右上角的 X 以退出 Seamless CMD

  10. 检查连接中心以查看会话是否关闭。关闭可能需要长达 30 秒。如果会话关闭,则表示没有应用程序或进程阻止正常注销。

    Graceful signout

  11. 如果会话未关闭,请按 F5 刷新 regedit 输出。

  12. 再次检查 LogoffCheckBlockingProcessLogoffCheckerBlockingVisibleProcess 的内容。CMD 不应再出现,但应该有另一个列出的进程。当前阻止会话注销的任何进程都必须在此处显示。

    在这种情况下,Notepad.exe 是在命令提示符关闭之前从已发布的命令提示符中打开的,并且此远程记事本进程正在阻止正常注销。

    Regedit

  13. 记下此可执行文件的路径以及它出现在哪个注册表项中,并将其输入到远程树下的以下注册表项中:

    • 如果它出现在 LogoffCheckBlockingProcess 中:HKLM\SYSTEM\CurrentControlSet\Control\Citrix\wfshell\TWILogoffCheckSysModulesInternal
    • 如果它出现在 LogoffCheckerBlockingVisibleProcess 中:HKLM\SYSTEM\CurrentControlSet\Control\Citrix\wfshell\TWILogoffCheckVisibleSysModules

    注意:

    如果注册表项中已有一个或多个条目,请在末尾添加逗号,并将新条目放在逗号之后。

    Regedit-final

  14. 从客户端的连接中心注销会话,然后重新打开远程应用程序。

  15. 重复步骤 9-16,直到在关闭远程应用程序后 30 秒内自动注销会话。

    注意:

    故障排除后,如果需要,请恢复临时防火墙更改以允许远程注册表访问。

如何修改 LogonUI 以在打开已发布的应用程序时全尺寸查看 Windows 免责声明消息

对于未发生身份验证直通的场景,LogonUI 窗口缩放已得到改进。LogonUI 窗口根据所使用的显示器分辨率和 DPI 设置进行缩放,这确保了完整的 LogonUI 窗口可见而不会出现任何裁剪。

窗口大小(以像素为单位)也可以在注册表中手动设置。

  1. 使用“运行”命令上的 regedit 打开 注册表编辑器

  2. 转到 HKEY_LOCAL_MACHINE\Software\Citrix\CtxHook\AppInit_DLLS\Seamless Hook\

  3. 创建两个新的 DWORD 注册表项:LogonUIWidthLogonUIHeight

  4. 将注册表项的值设置为 LogonUI 窗口所需的宽度和高度(以像素为单位)。

    手动设置 LogonUI 窗口大小时,将禁用自动缩放。

注意:

这些注册表路径已从 2407 及更高版本更改。旧的注册表值将被忽略并弃用。

默认情况下,LogonUI 窗口包含一个带有关闭按钮的标题栏,如果需要,最终用户可以通过该按钮断开会话。

禁用标题栏

您可以使用以下注册表项禁用 LogonUI 窗口中的标题栏:

  1. 使用“运行”命令上的 regedit 打开注册表编辑器。

  2. 转到 HKEY_LOCAL_MACHINE\Software\Citrix\CtxHook\AppInit_DLLS\Seamless Hook\

  3. 创建新的 DWORD 注册表项:LogonUICaption,并将其值设置为 0

    LogonUI window with tilebar

已发布的应用程序未显示

请参阅支持文章以排查 已发布的应用程序无法启动或在启动期间消失无法显示 的情况。

要排查实例

其他 Seamless 配置设置

在大多数情况下,默认服务器设置足以满足大多数应用程序的需求,并且已发布的应用程序不需要其他设置。

在某些情况下,需要进行额外配置,包括控制指定应用程序窗口的交互和显示,以及已发布的应用程序环境本身的设置。

注意:

Citrix 不建议更改这些配置设置,除非 Citrix 支持明确指示。

这些设置在 Seamless 配置设置知识库文章 中有概述。