有人知道 Citrix 和 Delphi 2007 应用程序之间的问题吗? (也许还有其他开发语言?)

发布于 2024-08-04 23:09:20 字数 1052 浏览 9 评论 0原文

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

尽管少数用户确实在 Citrix 服务器上使用此应用程序,但我们不支持 Citrix 使用此应用程序。 (基本上,它允许这些用户更加移动。)但是,即使我们不断告诉他们我们不支持 Citrix,这些客户还是试图推动我们帮助他们解决他们偶尔会遇到的一些问题。

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

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

那么有人知道 Delphi 应用程序在 Citrix 系统上可能遇到的一些常见问题吗? 有谁知道 Citrix 的常见问题吗? 是否有针对 Citrix 问题的银弹或金锤解决方案?

顺便提一句。我对 Citrix 的了解仅限于此维基百科条目和此网站...我已经Google 搜索...

The situation is simple. I've created a complex Delphi application which uses several different techniques. The main application is a WIN32 module but a few parts are developed as .NET assemblies. It also communicates with a web service or retrieves data from a specific website. It keeps most of it's user-data inside an MS Access database with some additional settings inside the Registry. In-memory, all data is converted inside an XML document, which is occasionally saved to disk as backup in case the system crashes. (Thus allowing the user to recover his data.) There's also some data in XML files for read-only purposes. The application also executes other applications and wants for those to finish. All in al, it's a pretty complex application.

We don't support Citrix with this application, although a few users do use this application on a Citrix server. (Basically, it allows those users to be more mobile.) But even though we keep telling them that we don't support Citrix, those customers are trying to push us to help them with some occasional problems that they tend to have.

The main problem seems to be an occasional random exception that seems to pop up on Citrix systems. Never at the same location and often it looks related to some memory problems. We've p[lenty of error reports already and there are just too many different errors. So I know solving all those will be complex.

So I would like to go a bit more generic and just want to know about the possible issues a Delphi (2007) can have when it's run on a Citrix system. Especially when this application is not designed to be Citrix-aware in any way. We don't want to support Citrix officially but it would be nice if we can help those customers. Not that they're going to pay us more, but still...

So does anyone know some common issues a Delphi application can have on a Citrix system?
Does anyone know about common issues with Citrix in general?
Is there some Silver Bullet or Golden Hammer solution somewhere for Citrix problems?

Btw. My knowledge about Citrix is limited to this Wikipedia entry and this website... And a bit I've Googled...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

烟花肆意 2024-08-11 23:09:20

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

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

There were some issues in the past with Published Delphi Applications on Citrix having no icon in the taskbar. I think this was resolved by the MainFormOnTaskbar (available in D2007 and higher). Apart from that there's not much difference between Terminal Server and Citrix (from the Application's perspective), the most important things you need to account for are:

  • Users are NEVER administrator on a Terminal or Citrix Server, so they no rights in the Local Machine part of the registry, the C drive, Program Folder and so on.
  • It must be possible for multiple users on the same system to start your application concurrently.
  • Certain folders such as the Windows folder are redirected to prevent possible application issues, this is also means that API's like GetWindowsFolder do not return the real windows folder but the redirected one. Note that this behaviour can be disabled by setting a particular flag in the PE header (see delphi-and-terminal-server-aware).
  • Sometimes multiple servers are used in a farm which means your application can run on any of these servers, the user is redirected to the least busy server at login (load balancing). Thefore do not use any local database to store things.
  • If you use an external database or middleware or application server note that multiple users will connect with the same computername and ip address (certain Citrix versions can use Virtual IP addresses to address this).
花开柳相依 2024-08-11 23:09:20

我们的许多客户在 Citrix 上使用我们的 Delphi 应用程序。一般来说,效果很好。我们在旧版本的 Delphi 中遇到了打印问题,但这在较新版本的 Delphi 中已得到解决(当然比 Delphi 2007 更新)。但是,由于您现在在终端服务下运行,因此无论有或没有 Citrix,某些功能都无法正常工作。例如,您无法与旧版本的 InterBase 建立本地连接,该版本使用不带 GLOBAL 修饰符的命名管道。使用 DoubleBuffered 也是一个非常糟糕的主意。等等。我的建议是寻找有关 Win32 应用程序和终端服务的建议,而不是特别寻找有关 Delphi 和 Citrix 的建议。据我所知,Citrix 特有的一个问题是您不能指望拥有可用的 C 驱动器。希望您没有将任何驱动器号硬编码到代码中,但如果有,您可能会遇到麻烦。

Many of our customers use our Delphi applications on Citrix. Generally speaking, it works fine. We had printing problems with older versions of Delphi, but this was fixed in a more recent version of Delphi (certainly more recent than Delphi 2007). However, because you are now running under terminal services, there are certain things which will not work, with or without Citrix. For example, you cannot make a local connection to older versions of InterBase, which use a named pipe without the GLOBAL modifier. Using DoubleBuffered would also be a really bad idea. And so on. My suggestion is to look for advice concerning Win32 apps and Terminal Services, rather than looking for advice on Delphi and Citrix in particular. The one issue which is particular to Citrix that I'm aware of is that you can't count on having a C drive available. Hopefully you haven't hard-coded any drive letters into your code, but if you have you can get in trouble.

携余温的黄昏 2024-08-11 23:09:20

一般来说,您的应用程序需要与 MS 终端服务兼容才能与 XenApp 配合使用。我的理解是,.NET 应用程序与终端服务兼容,因此扩展后也应该在 Citrix 环境中工作。显然,由于您遇到了一些问题,但事情并不那么简单。

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

Generally speaking, your application needs to be compatible with MS Terminal Services in order to work with XenApp. My understanding is that .NET applications are Terminal Services-compatible, and so by extension should also work in a Citrix environment. Obviously, as you're suffering some problems, it's not quite that simple, however.

There's a testing and verification kit available from http://community.citrix.com/citrixready that you may find helpful. I would imagine the Test Kit and Virtual Lab tools will be of most use to you. The kit is free to use, but requires sign-up.

你曾走过我的故事 2024-08-11 23:09:20

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

Security can be an issue. If sensitive folders are not "sandboxed" (See Remko's discussion about redirection), the user can break out of your app and run things that they shouldn't. You should probe your app to see what happens when they "shell out" of your app. Common attack points are CHM Help, any content that uses IE to display HTML, and File Open/Save dialogs.
ex: If you show .chm help, the user can right-click within a help topic, View Source. That typically opens Notepad. From there, they can navigate the directory structure. If they are not properly contained, they may be able to do some mischief.
ex: If they normally don't have a way to run Internet Explorer, and your app has a clickable URL in the about box or a "visit our web site" in the Help menu, voila! they have access to the web browser. If unrestrained, they can open a command shell by navigating to the windows directory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文