做了一个三层应用程序!用户器端的程序是一个MWServer.Dll,客户端放置了一个DCOMConnection组件,其ComputerName为song11,Connected为True,ServerGUID和ServerName都已设置正确!在本机上运行时没有出错(服务器程序也在本机上),数据库为MSSqlServer2000,但是将midas.dll和客户端程序MWVision.exe拷到其他机器上运行(midas.dll已手工注册,且放将其放到system32\目录下)时出错,提示为MWVision.exe产生了错误,会被Windows关闭.您需要重新启动程序.请问,这是什么原因?

解决方案 »

  1.   

    >>>>>>>>>>>>>>>>>>>怎么没人回答啊!因为大家都过年去啦。多层应用在单机能运行,而在网络内出错通常是以下原因:
    1、权限设置问题。DCOM应用均需要有恰当的权限要求。缺省情况下,远程匿名用户没有启动运行本机DCOM服务的权限。
    2、网络问题。一方面是在广域网中,经常出现通信不畅;另一方面是防火墙等软件通常会阻止你的正常通信过程。
    当然也不排除客户机出现问题的可能。
      

  2.   

    我还是第一次遇到这种情况!如果把数据库及应用程序服务器放到另一台机子上(此机未安装Delphi),在开发的机子上(安装了Delphi7)执行客户端程序就一切正常!不知道哪位高人有什么办法能查一下是什么原因!
      

  3.   

    可能是DCOM配置问题,你可以改成Socket试试.
      

  4.   

    对啊,DCOM配置起来麻烦点,但用起来就方便了
    顺便提一声,客户端系统是什么???98前的系统最好要装dcom
      

  5.   

    多谢大家!问题已经解决!现在将此方法写出来与大家共同探讨学习!
    1 因为应用服务器程序是Dll,所以如果服务器程序与客户端程序不在同一台机器上时,要在客户端注册服务器程序,且客户端机器启动后要先登录服务器程序所在的机器才能运行客户程序;
    2 因为应用服务器程序的远程数据模块的Create事件中要读取注册表以进行数据库连接,但是,当服务器程序和客户端程序不在同一台机器上时,Create事件读取的注册表却是客户端的注册表而不是服务器程序所在的机器的注册表(不知道是为什么),所以必须将服务器程序所在的机器的注册表中相应的键导出,再在客户端导入!
    希望各位大侠指点!
      

  6.   

    软件运行时绝大部分只能读取本地注册表,所以你的软件读取的只能是client端的注册表,不太可能是服务器端的注册表呀。Windows 2000之后的OS提供有远程操作注册表的功能,可是我一窍不通。  :(
      

  7.   

    to VeryOldMan(老者) :我只是让服务器程序读取其所在机器的注册表啊,而不是在客户端读取注册表!
      

  8.   

    >>>>>>>>>>所以必须将服务器程序所在的机器的注册表中相应的键导出,再在客户端导入!其实你的程序确实在读取本地注册表,只是你的两台机的注册表不同。你的工作仅仅是把你所关心的注册表项同步而已,不是吗?