Windows Server 2008 R2上的旧版DCOM服务器

时间:2012-05-02 16:31:52

标签: delphi windows-server-2008-r2 dcom

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

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

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

  1. 我必须配置DCOM设置以允许远程启动或我在客户端上拒绝访问
  2. 如果DCOM服务器尚未运行,当客户端尝试连接到它时,我的服务器执行失败。
  3. 如果服务器正在运行且启动权限设置为允许远程启动,则客户端将启动DCOM服务器的新实例,而不是使用已启动的实例。这会导致帐户应用程序出现问题,因为同一用户尝试登录时不允许这样做。
  4. 如果我关闭服务器上运行的DCOM服务器,客户端很乐意使用自己的实例。我看不到DCOM服务器的主要形式,因为它在后台运行(可以在任务管理器中看到)
  5. 我找到了各种与这个问题相关的文章,但到目前为止还没有任何工作。这些包括以管理员身份运行DCOM服务器,不以管理员身份运行DCOM服务器,允许在防火墙中使用COM +,将DCOM服务器添加到防火墙,使用32位版本的DCOMCNFG将DCOM服务器添加到SysWOW64中,等等。

    现在不确定去哪里......

    感谢您的帮助

    西蒙

1 个答案:

答案 0 :(得分:3)

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

顺便说一句:

  • 永远不要使用管理员权限运行DCOM服务器,除非确实需要它。否则你可以创建一个安全漏洞。
  • 如果存在防火墙,则必须向调用客户端打开RPC端点端口和为DCOM配置的端口。
  • 不要在您的应用程序中混淆系统目录。没有必要,如果你的应用只在那里工作,你有一个特权配置错误,并且你不能正确地解决它把文件放在他们不属于的地方。