1

情况很简单。我创建了一个复杂的 Delphi 应用程序,它使用了几种不同的技术。主要应用程序是一个 WIN32 模块,但有几个部分是作为 .NET 程序集开发的。它还与 Web 服务通信或从特定网站检索数据。它将大部分用户数据保存在 MS Access 数据库中,并在注册表中保留一些附加设置。在内存中,所有数据都在 XML 文档中进行转换,该文档偶尔会保存到磁盘作为备份,以防系统崩溃。(因此允许用户恢复他的数据。)XML 文件中还有一些数据用于只读目的。该应用程序还执行其他应用程序并希望这些应用程序完成。总而言之,这是一个相当复杂的应用程序。

我们不支持使用此应用程序的 Citrix,尽管少数用户确实在 Citrix 服务器上使用此应用程序。(基本上,它可以让这些用户更加灵活。)但即使我们一直告诉他们我们不支持 Citrix,这些客户仍试图推动我们帮助他们解决他们经常遇到的一些偶尔出现的问题。

主要问题似乎是偶尔出现在 Citrix 系统上的随机异常。从不在同一个位置,而且通常看起来与一些内存问题有关。我们已经收到了大量的错误报告,并且有太多不同的错误。所以我知道解决所有这些问题会很复杂。

因此,我想更通用一点,只想了解 Delphi (2007) 在 Citrix 系统上运行时可能出现的问题。尤其是当此应用程序未设计为以任何方式支持 Citrix 时。我们不想正式支持 Citrix,但如果我们能帮助这些客户,那就太好了。并不是说他们会付给我们更多的钱,但仍然...

那么有人知道 Delphi 应用程序在 Citrix 系统上可能遇到的一些常见问题吗?有谁知道 Citrix 的一般常见问题?Citrix 问题是否有一些 Silver Bullet 或 Golden Hammer 解决方案?

顺便提一句。我对 Citrix 的了解仅限于这个 Wikipedia条目和这个网站……而且我用谷歌搜索了一下……

4

4 回答 4

7

过去在 Citrix 上发布的 Delphi 应用程序在任务栏中没有图标时存在一些问题。我认为这是由 MainFormOnTaskbar 解决的(在 D2007 及更高版本中可用)。除此之外,终端服务器和 Citrix 之间没有太大区别(从应用程序的角度来看),您需要考虑的最重要的事情是:

  • 用户永远不是终端或 Citrix 服务器的管理员,因此他们在注册表的本地计算机部分、C 驱动器、程序文件夹等中没有权限。
  • 同一系统上的多个用户必须可以同时启动您的应用程序。
  • 某些文件夹(例如 Windows 文件夹)被重定向以防止可能的应用程序问题,这也意味着像 GetWindowsFolder 这样的 API 不会返回真正的 Windows 文件夹,而是返回重定向的文件夹。请注意,可以通过在 PE 标头中设置特定标志来禁用此行为(请参阅delphi-and-terminal-server-aware)。
  • 有时在一个场中使用多个服务器,这意味着您的应用程序可以在这些服务器中的任何一个上运行,用户在登录时被重定向到最不忙的服务器(负载平衡)。因此不要使用任何本地数据库来存储东西。
  • 如果您使用外部数据库或中间件或应用程序服务器,请注意多个用户将使用相同的计算机名和 IP 地址进行连接(某些 Citrix 版本可以使用虚拟 IP 地址来解决此问题)。
于 2009-09-20T05:51:02.917 回答
3

我们的许多客户在 Citrix 上使用我们的 Delphi 应用程序。一般来说,它工作正常。我们在使用旧版本的 Delphi 时遇到了打印问题,但这已在较新版本的 Delphi 中得到解决(肯定比 Delphi 2007 更新)。但是,由于您现在在终端服务下运行,因此无论有没有 Citrix,有些东西都无法正常工作。例如,您不能与旧版本的 InterBase 建立本地连接,后者使用没有 GLOBAL 修饰符的命名管道。使用 DoubleBuffered 也是一个非常糟糕的主意。等等。我的建议是寻求有关 Win32 应用程序和终端服务的建议,而不是特别寻求有关 Delphi 和 Citrix 的建议。我知道的 Citrix 特有的一个问题是您不能指望有可用的 C 驱动器。

于 2009-09-18T14:47:45.520 回答
1

一般来说,您的应用程序需要与 MS 终端服务兼容才能与 XenApp 一起使用。我的理解是 .NET 应用程序与终端服务兼容,因此通过扩展也应该在 Citrix 环境中工作。显然,当您遇到一些问题时,它并不是那么简单。

http://community.citrix.com/citrixready提供了一个测试和验证工具包,您可能会发现它很有帮助。我想测试套件和虚拟实验室工具对您最有用。该套件可免费使用,但需要注册。

于 2009-09-18T14:23:56.713 回答
1

安全性可能是一个问题。如果敏感文件夹没有被“沙盒化”(参见 Remko 关于重定向的讨论),用户可以跳出您的应用程序并运行他们不应该执行的操作。您应该探测您的应用程序,看看当它们“退出”您的应用程序时会发生什么。常见的攻击点是 CHM 帮助、使用 IE 显示 HTML 的任何内容以及文件打开/保存对话框。
例如:如果您显示 .chm 帮助,用户可以在帮助主题中右键单击查看源代码。这通常会打开记事本。从那里,他们可以浏览目录结构。如果它们没有得到适当的控制,它们可能会做一些恶作剧。例如:如果他们通常无法运行 Internet Explorer,并且您的应用在“关于”框中有一个可点击的 URL,或者在“帮助”菜单中有“访问我们的网站”,瞧!他们可以访问网络浏览器。如果不受限制,他们可以通过导航到 windows 目录来打开命令 shell。

于 2011-02-01T13:23:03.427 回答