4

我有一个用 Delphi v6 编写的旧版 DCOM 服务器和客户端应用程序。DCOM 服务器当前配置为运行一次并为所有客户端提供服务。它运行一次的主要原因是服务器为帐户应用程序提供了一个接口,并且必须登录并且对于给定的用户名只能执行一次。

我们的客户现在想要将他们的服务器升级到 Windows Server 2008 R2,让客户端继续使用 Windows XP,但我无法复制当前的设置。

我可以在测试台上工作的当前设置有点奇怪!

  1. 我必须配置 DCOM 设置以允许远程启动,否则我在客户端上被拒绝访问
  2. 如果 DCOM 服务器尚未运行,当客户端尝试连接到它时,服务器执行失败。
  3. 如果服务器正在运行并且启动权限设置为允许远程启动,则客户端会启动 DCOM 服务器的新实例,而不是使用已启动的实例。这会导致帐户应用程序出现问题,因为同一用户尝试登录是不允许的。
  4. 如果我关闭服务器上运行的 DCOM 服务器,客户端会愉快地使用它自己的实例。我看不到 DCOM 服务器主窗体,因为它在后台运行(可以在任务管理器中看到)

我找到了各种与这个问题有关的文章,但到目前为止没有任何效果。其中包括以管理员身份运行 DCOM 服务器、不以管理员身份运行 DCOM 服务器、允许 COM+ 在防火墙中、将 DCOM 服务器添加到防火墙、位于 SysWOW64 中的 DCOM 服务器、使用 32 位版本的 DCOMCNFG 等。

现在不知道去哪里了...

谢谢你的帮助

西蒙

4

1 回答 1

3

DCOM 默认权限在 XP SP2 和 2003 SP1 中已更改。您需要正确配置以使您的服务正常运行。通常,除非您在服务中实现 DCOM 服务器(由于 DCOM 支持有限,Delphi 不允许这样做),否则 DCOM 服务器会在用户连接时启动,这就是您可能需要“远程启动”权限的原因。此外,DCOM 服务器可以在给定用户、交互式用户(远程客户端必须避免!)或启动用户的上下文中启动。你用的是什么模式?- 如果设置为“启动用户”,它将始终创建一个新实例。在新操作系统之前,您的服务器是如何实例化的?它的类工厂是如何实现的?有关 DCOM 和 Delphi 实现的一些有趣信息,请参见此处。

顺便提一句:

  • 除非确实需要,否则永远不要以管理员权限运行您的 DCOM 服务器。否则,您可以创建一个安全漏洞。
  • 如果存在防火墙,则 RPC 端点端口和为 DCOM 配置的端口都必须对调用客户端开放。
  • 不要将系统目录与您的应用程序混淆。没有必要,如果您的应用程序只在那里工作,那么您的权限配置错误,并且您将无法正确解决它,将文件放在不属于它们的位置。
于 2012-05-03T08:52:49.343 回答