Delphi应用程序和TSAWARE头标记

8

这个问题是否也适用于在终端服务器上运行的Delphi应用程序?

正如MSDN文章"在Windows Server 2008 R2中,运行在RD Session Host服务器上的Office 2007或Office 2003应用程序可能会意外关闭"所解释的那样

此问题是由Tsappcmd.dll组件引起的。该组件对不具备终端服务器意识的应用程序进行导入地址表(IAT)更改,以防止病毒或恶意软件恶意挂钩应用程序。因此,由于模块加载顺序,应用程序可能会遇到临时内存损坏。 Office 2007和Office 2003不包含TSAWARE头标志。此标志通知服务器应用程序具有终端服务器意识。

一些Delphi 2009应用程序在用户环境(Windows Server 2008 R2 Service Pack 1)经常挂起或崩溃。我正在寻找可能的原因,因为这些挂起/崩溃无法重现。

MSDN的文章似乎首先适用于Office产品,这是正确的吗?还是说Tsappcmd.dll也可以修改非Office程序,因此在Delphi应用程序中可能会出现错误?(当然,如果缺少TSAWARE标志不会有害的话,我更愿意保留Delphi应用程序的原样。)

1
使用map2dbg和Process Explorer来诊断进程阻塞的位置。 - David Heffernan
4
如何设置TSAWARE flag?这里有一篇关于Delphi和Terminal Server Aware的博客,详细介绍了如何在Delphi应用程序中设置TSAWARE标志。为使应用程序在远程桌面环境下正常运行,需要设置TSAWARE标志。该博客提供了两种方法来实现此目标:使用PE Explorer或手动编辑PE头。无论您选择哪种方法,都需要在PE头中插入一个新的数据段,并将其命名为“TSLG”(不包括引号)。然后,在该段的开头插入4个字节的值“$40”,表示TSAWARE标志已启用。完成此操作后,重新编译并部署应用程序即可使其在远程桌面环境下正确工作。 - Ondrej Kelle
4
有趣的问题。另请参见:https://dev59.com/sm445IYBdhLWcg3wcZ8N - Leonardo Herrera
2
@mjn:是的,在安装期间意味着在第一次初始安装期间。终端服务器基本上会捕获写入HKCU键的任何内容,并将其写入名为“影子键”的特殊注册表键中。在另一个用户登录时,将比较并将影子键的内容写入该用户的HKCU中。 - Remko
我感到困惑,在Windows Server 2008 R2上的Excel 2010插件中遇到了类似的稳定性问题。如果“在安装过程中”意味着在最初的安装过程中,那么这是否意味着库可以在安装后,在运行于TSAWARE进程内时自由地写入用户的HKCU? - Rabid
显示剩余3条评论
1个回答

5

是的,Tsappcmd.dll会影响所有没有在PE头中设置TSAWARE标志的程序。然而,这并不意味着所有这些应用程序都受到此特定错误的影响。但是,您可以通过设置TSAWARE标志(请参见TOndrej提供给我的博客中的链接)或设置KB文章中提到的注册表键来轻松测试此功能。

附注:解释它是防病毒保护机制似乎是一个虚假的解释,这个机制是为了应用程序兼容性而引入的...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接