我也关注!
我的注册办法是:将应用服务器端的.exe在客户端执行一下,就可以了,
但这种办法明显不合情理,有没有更好的办法?!

解决方案 »

  1.   

    我用的是Socket连接,不需要注册服务器,但我想可以用以下的方法注册:
    编写一个批处理文件,文件内容为
    tregsvr -q yourservername1.exe(.dll)
    tregsvr -q yourservername2.exe(.dll)
    ...
    或者你自己写一个程序调用。
    tregsvr在Delphi的bin目录下,tregsvr的源代码在C:\Program Files\Borland\Delphi5\Demos\Activex\Tregsvr下
      

  2.   

    SocketConnection是不要的,但 DCOMConnection怎么办呢?
      

  3.   

    老大,我上面写的就是注册DCom服务器啊。
      

  4.   

    DCOM服务程序只需在服务器端注册,客户机的TDCOMConnection中只需指出服务器名(或地址)和ProgID(或ProgGUID)即可,可用dcomcfng.exe管理服务器上的Dcom服务程序的配置
      

  5.   

    to hzb(Explorer):
      tregsvr -q yourservername1.exe(.dll) 无效;
       ===============================================
    如果不在客户端注册服务器的DCOM的宿主.exe,在客户端会出现
    "类名未注册"的提示,如何注册远程的DCOM类名呢,其实就是写
    注册表,不知有无快捷的方法?!
      

  6.   

    应该研究一下DCOM宿主.exe注册的原理!!!!!!!!!!!!!!!!!!!!!!
    悬赏300分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
      

  7.   

    我看了很多书,现在的书真是狗屁,到了关键的地方,就说一句,如果客户端和应用服务器
    不是同一台计算机,应该向注册activex或dll那样注册。
    可到底在客户端怎么注册应用服务器呢?直接运行.exe是不方便的。因为应用服务器肯定和
    数据库连接,运行必须在每个客户端先新建odbc连接才行,否则不能运行应用服务器程序。
      

  8.   

    to BCB(:))
    tregsvr -q yourservername1.exe(.dll) ,不加参数q,它的提示信息是什么?tregsvr实际上也就是在客户端运行一下服务器程序,只是我们看不到而已。
    奇怪的是,刚才我做了一个简单的例子,用DCom连接,在客户端我没有注册服务器,它也可以正常运行。那台客户端的机器装了Delphi,我想可不可能是由于midas.dll的问题?
      

  9.   

       to   :hzb(Explorer
       同感,   
       奇怪的是,刚才我做了一个简单的例子,用DCom连接,在客户端我没有注册服务器,它也可以正常运行。那台客户端的机器装了Delphi,我想可不可能是由于midas.dll的问题? 
      

  10.   

    楼上可能是对的,我也这么想过,但没试。
    周一我去厂里试一下,把它的什么“号”输到
    客户机的DCOMConnection1属性中试试,是不是就免了注册?!
      

  11.   


    邦助中说的很清楚:
    用DCOMConnection->ServerGUID代替ServerName就可避免客户端注册了:Using ServerGUID rather than ServerName to identify 
    the application server is more robust because it does not 
    require the application server to be registered on the client system.注册的值在  xxx_TLB.CPP 中,第三个号 CLSID_My就是:const GUID LIBID_Server0 = {0xE4B83600, 0x1F9A, 0x11D5,{ 0xA1, 0x8E, 0x00, 0x50, 0xBA, 0xAB, 0xA9, 0x4C} };
    const GUID IID_IMy = {0xE4B83601, 0x1F9A, 0x11D5,{ 0xA1, 0x8E, 0x00, 0x50, 0xBA, 0xAB, 0xA9, 0x4C} };
    const GUID CLSID_My = {0xE4B83603, 0x1F9A, 0x11D5,{ 0xA1, 0x8E, 0x00, 0x50, 0xBA, 0xAB, 0xA9, 0x4C} };在设计时要这样填,就可避免在客户端异机注册DCOM了
    DCOMConnection1->ServerGUID="{E4B83603-1F9A-11D5-A18E-0050BAABA94C}";
      

  12.   

    to thorhua(thor):这个问题终于弄明白了,非常感谢thorhua(thor)的提示,请你在
    下面的贴子上留言,就便给你加分!
     http://www.csdn.net/expert/topic/128/128972.shtm
      

  13.   

    to pipai(我是屁派) :
       这个注册问题,我又试了一上午,在ServerGUID上填上ProgID,
    只能保证NT有帐号的用户可以,但无帐号的用户仍出现:
          Interface not support(接口不支持)why ????怎么办?
       他不给分,我可以给分,帖子
    http://www.csdn.net/expert/topic/128/128972.shtm
      

  14.   

    估计还是号的问题:
       有三个号的,
    Interface not support,是接口号没注册的问题!
      

  15.   

    首先,最好用ServerGUID(原因BCB已说),客户机只需填写TDCOMConnection的ComputerName和ServerGUID即可,这样客户机不需注册,只需服务器端注册
    为了使无账号用户也能访问,按以下步骤设置:
    1、运行dcomcnfg.exe, 应用程序-->“你的Server程序”的属性-->安全性-->选择编辑“可以对能启动该程序的用户”-->添加"Everyone All Lauch",然后“应用”该设置
    2、定位你的程序,如c:\temp\yourserver.exe,右击鼠标,选择“属性”-->“安全性”,添加“Everyone 完全控制”
    以上测试在客户为Win98,以非NT账号用户进入;服务器为NT4.0,用dcomcnfg.exe配置,调试通过
      

  16.   

    补充:
    上面步骤2不详细,进入“文件属性”,选择“安全性”后,在“权限”中添加“Everyone 完全控制”
      

  17.   

    我的服务器是win2000server,就是照你做的,
    没有帐号的win98客户机就是不行,出现Interface not support!
      

  18.   

    我是用demos\midas\empedit作测试的,服务器为NT4(安装了BDE),客户机为win98,服务器注册dcom服务程序(具体方法设置:复制server.exe和midas.dll到NT4上的某一目录,然后运行server.exe注册dcom服务,运行dcomcnfg.exe按上面我所说的对EmpServerObject进行配置,同时更改Server.exe文件的安全性属性的权限为everyone控制),客户机不注册服务程序,修改client的TDCOMConnection构件的ComputerName为NT4服务器名(或IP地址),只需保留ServerGUID,对于账号用户和非帐号用户都通过了.主要提示:对于非账号用户,不能在win98登录时出现的登录窗口按“取消”,必须确定,对于非账号用户,我的“网络”设置中,“主网络登录”选择了“Windows登录”,同时“Microsoft网络用户”属性中不选择“登录到Windows NT域”,这样,win98启动时,我随便输入一个不存在的用户名,并“确定”进入,可以正常运行empedit.exe再次提醒:不能在win98进入时按"取消",否则可能有部分网络访问功能不能实现,我个人感觉,NT4中everyone虽包含非账号用户,但首先要求用户正常进入win9x,才能访问有everyone权限的资源。试验通过,有问题一起讨论,另,BCB用的Window2000环境,我这边没有,我想,既然2000兼容NT4,应该问题不大,只不过,如果你使用了ADS,则可能还要在ADS管理中配置相关资源(如文件、目录、通讯等)访问权限