Citrix 和 WPF,蓝色窗口

Citrix 和 WPF,蓝色窗口

我们正在构建将部署在 Citrix 上的 WPF 应用程序。目前,您只能在 Citrix 下看到一个蓝色窗口,尽管该应用程序在服务器本身上运行良好。

网上确实似乎详细说明了一些问题。

Citrix 论坛讨论

微软热修复

我们已经应用了热修复,但这似乎至少并没有为我们解决问题。

另外,在这个网站上发现了同样的问题,但它已被作者删除,所以没有答案。

我在 Windows 2003 服务器上运行 citrix 4.5。我试图发布一个 WPF 应用程序(任何 WPF 应用程序都有这个问题),但我得到的只是应用程序应该在的位置的一个蓝色矩形。该矩形的大小和形状与我期望的窗口完全相同,但它只是蓝色(看起来像 citrix 桌面背景的颜色)。有什么想法吗?

答案1

这是一个非常老的问题,但我遇到过同样的问题。

我不知道为什么,但是当我有两个显示器时,Citrix 只会显示蓝色窗口来显示任何 WPF。我通过拔掉其中一个显示器解决了这个问题,不知为何,Citrix 可以正确显示 WPF。

我的同事的设置和我完全一样,只是我们的第二台显示器品牌不同。他的设置对两台显示器都很好用。

我们在装有 XP 的 Citrix 上运行 .Net 4.0。

答案2

我自己没有遇到过这个问题,但由于会话图形的内存使用量增加,我们在双屏客户端上遇到了色彩深度降低的问题。

也许蓝屏是自动降级的一个奇怪的现象,当您超出会话图形限制时 Citrix 就会启动?

我不太确定 MetaFrame XP,但据我回忆,通过 GUI 可以配置的会话图形限制的最大值为 8.192 kb。您的设置是什么?

我们做了什么

我们通过注册表值将限制增加到 16 MB最大LVBM内存,能够以 24 位色彩深度运行,甚至使用双 1920x1080 显示器。

HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\icawd\thin16
MaxLVBMem (REG_DWORD) = 0x1000000 (16777216 dec)

我们还增加了会话视图大小从 20 到 32:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
SessionViewSize (REG_DWORD) = 0x20 (32 dec)

最后,我们增加了会话池大小从默认值 32 MB(在 RAM >2 GB 的系统上)更改为 48 MB:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
SessionPoolSize (REG_DWORD) = 0x30 (48 dec)

正如 Microsoft KB840342 中所述:

理想情况下,MaxLVBMem 消耗的 SessionPoolSize 不应超过系统分配的 35% 到 40%。如果所需的 MaxLVBMem 消耗的 SessionPoolSize 超过 40%,请向上调整 SessionPoolSize 参数

和:

Microsoft 建议将此设置以 16 MB 为增量进行增加。不建议将 SessionPoolSize 参数增加到 80 MB 以上。

如果 MaxLVBMem(设置为 16 MB)最多占用 SessionPoolSize 的 35-40%,则该值必须至少为 46 MB。这可以通过将值从默认值 32 MB 提高到 48 MB 来实现。

编辑:

但是,正如 Microsoft 的知识库文章中所述,您必须找到适合您环境的平衡点。从 32 MB 增加到 48 MB 16 MB 可能不足以解决您的问题。但是,如果将值增加太多,则可能会耗尽内存池。

如果分配更多内存来增加桌面堆,则可能会减少终端服务器分配给其他资源(如非分页池、分页池和系统缓存)的内存。这将影响终端服务器的性能。此外,当为 SessionViewSize 和 SessionPoolSize 条目分配更多内存时,分配给映射内核虚拟空间的内存将会减少。这反过来可能会使终端服务器仅支持有限数量的用户。

话虽如此,我们目前看到迹象表明,48 MB 的 SessionPoolSize 可能不足以满足我们的环境要求,因此我可能会使用 64 MB 进行测试。

确保在更改前后监视内存池并释放系统 PTE :-)

参考

当我再次阅读参考的知识库文章时,微软的 KB840342 听起来是我在您的情况下首先要尝试的东西。

相关内容