本文介绍了有没有人知道Citrix和Delphi 2007应用程序之间的问题? (还有其他开发语言?)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



尽管有几个用户在Citrix服务器上使用此应用程序,但我们不支持Citrix。 (基本上,它允许这些用户更具有移动性。)尽管我们不断告诉他们我们不支持Citrix,但是这些客户正在努力推动我们帮助他们发现偶尔出现的问题。 p>

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



所以我想要更通用,只想知道Delphi(2007)可能的问题当它在Citrix系统上运行时。特别是当此应用程序不是以任何方式设计为Citrix感知。我们不想官方支持Citrix,但如果我们能够帮助这些客户,那将是很好的。不,他们会支付更多的钱,但仍然...



有没有人知道Delphi应用程序在Citrix系统上可以遇到的常见问题?
有没有人知道Citrix的常见问题?
有没有一些Silver Bullet或金锤解决方案在Citrix问题的某个地方?



Btw。我对Citrix的了解仅限于条目, ...有一点我有 ...

解决方案

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




  • 用户永远不是终端或Citrix服务器上的管理员,因此在注册表的本地计算机部分,C盘,程序文件夹等中没有权限。

  • 必须可能同一系统上的多个用户同时启动应用程序。

  • 将某些文件夹(如Windows文件夹)重定向到防止可能的应用程序问题,这也意味着API的GetWindowsFolder不返回真实的Windows文件夹,但重定向的。请注意,可以通过在PE头中设置特定标志来禁用此行为(请参阅)。

  • 有时在一个服务器场中使用多个服务器,这意味着您的应用程序可以运行任何这些服务器,用户在登录时被重定向到最不忙的服务器(负载平衡)。因此,不要使用任何本地数据库来存储东西。

  • 如果使用外部数据库或中间件或应用程序服务器,请注意,多个用户将使用相同的计算机名和IP地址进行连接(某些Citrix版本可以使用虚拟IP地址来解决这个问题。)


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...

解决方案

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).

这篇关于有没有人知道Citrix和Delphi 2007应用程序之间的问题? (还有其他开发语言?)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-25 06:24