在win98上用DCOMConnection连接另一台win2000三层数据库应用服务器终于成功了!

BCB 2001-05-21 05:16:00
加精
开始一直连接不成功,今天莫明其妙却成功了,运行环境:
客户端: win98,与权限无关,也不须什么运行DCOMcnfg.exe
C++builder5.0

服务器端: win2000,工作组方式(相当于对等网),
C++BUILDER5+ BDE
要设DCOM应用服务器的权限,运行DCOMcnfg.exe
My Object的安全属性:
1.身份验证级别: 连接;
2.位置: 在这台计算机上运行应用程序;
3.安全:
自定义访问权限 everyone 允许访问
自定义启动权限 everyone 允许访问
4.身份标识: 交互式用户
5.终接点: NetBEUI,TCP/IP
================================================================
兴奋得晕倒两次!

...全文
591 71 打赏 收藏 转发到动态 举报
写回复
用AI写文章
71 条回复
切换为时间正序
请发表友善的回复…
发表回复
BCB 2001-08-14
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/218/218710.shtm
注册问题终于解决了
ppzhao 2001-07-31
  • 打赏
  • 举报
回复
到底注册问题如何解决??
困惑
BCB 2001-07-23
  • 打赏
  • 举报
回复
请不要被题目搞上当了,本问题未能解决,空欢喜一场
gengqt 2001-07-20
  • 打赏
  • 举报
回复
我的客户与服务器均为win98,连接时客户端出现错误"RPC服务器无法使用"?
dana 2001-07-05
  • 打赏
  • 举报
回复
我现已可以连接,客户端可以激活服务器端的程序,可是客户端出错,提示“拒绝访问”?
BCB 2001-06-22
  • 打赏
  • 举报
回复
!
BCB 2001-06-22
  • 打赏
  • 举报
回复
!
BCB 2001-06-22
  • 打赏
  • 举报
回复
WIn2000Server中,
everyone 指所有服务器的客户,包括不包括没有帐号的用户?!
NetWork指远程网络客户,是不是指无帐号的用户?
现在要设法给无帐号的用户设定运行DCOM权限!
thorhua 2001-06-13
  • 打赏
  • 举报
回复
我知道你的问题了,我可以试一下。
有结果再告诉你。
BCB 2001-06-13
  • 打赏
  • 举报
回复
楼上老兄,分是要给你的,现在出现新的问题,NT上没有帐号的用户
仍不行,出现 Interface not support,能不能再立新功?
thorhua 2001-06-13
  • 打赏
  • 举报
回复
在Windows2000网络下有一个域(局域网内)的概念和一个本机域的概念。如果DCOM服务器在WINDOWS2000下运行,由于安全的原因。DCOM客户端用户的登录账号必须存在于域(局域网内)中或者存在于DCOM服务器所在机器的的本机域中(GUEST账号不行)。这样DCOM客户程序才能正常的运行。
(以上结论只是通过测试得到的,没有找到官方文档。如果哪位兄弟得到不同结果,或找到相关文档,希望贴出来一起研究)
BCB 2001-06-12
  • 打赏
  • 举报
回复
你的步骤跟我一样
pipai 2001-06-12
  • 打赏
  • 举报
回复
我是用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管理中配置相关资源(如文件、目录、通讯等)访问权限
BCB 2001-06-12
  • 打赏
  • 举报
回复
我的一台win98客户机,由于已执行dcom的.exe,现在没有NT帐号,仍能
登上应用服务器,怪!我已从win98注册表上删除了所有与注册有关的参数.
==============================
要到一台没有BCB5,也没有执行过dcom宿主.exe的局域网机上试.
不过要带上 dbclient.dll与 midas.dll,且要注册.
thorhua 2001-06-12
  • 打赏
  • 举报
回复
抱歉,这几天出差了,我是来拿分的。
thorhua 2001-06-12
  • 打赏
  • 举报
回复
抱歉,这几天出差了,我是来拿分的。
BCB 2001-06-11
  • 打赏
  • 举报
回复
GUID看样子一定要加上,这不算费事,这个值是固定不变的;
没有帐号的用户 就会出现Interface not support,一旦有了登录帐号,
重新登录后就不会出现Interface not support
如果不解决这个问题,ActiveX中就不能用DCOMConnection,
有NT帐号的用户毕竟是少数!
luhongjun 2001-06-11
  • 打赏
  • 举报
回复
我没有找到更好的方法,大家都来看看。

我的想法:只添加ServerName是否可以?

BCB你的DCOMConnection1->ServerGUID="{E4B83603-1F9A-11D5-A18E-0050BAABA94C}";
就是我说的第二种方法,这种方法的缺点是必须先知道服务器的GUID,因此我把他写到文件中或

注册表中,在运行时自动调用。Interface not support(接口不支持)不支持我经常遇到,一直不知是什么原因,原来是没有域用户,谢谢。


我也希望有最终解决方案。
如果:可以不运行服务器端的.EXE,可以不知道服务器的GUID就能使客户端连接上服务器端。
我也追加200分。

BCB 2001-06-11
  • 打赏
  • 举报
回复
这个注册问题,我又试了一上午,在ServerGUID上填上ProgID,
只能保证NT有帐号的用户可以,但无帐号的用户仍出现:
Interface not support(接口不支持)
奇怪的是执行应用服务器的dcom寄主.exe后,
无帐号的用户也可以了;


luhongjun 2001-06-11
  • 打赏
  • 举报
回复
pipai(我是屁派)谢谢你的关心,我要多找几台机器试一试,你试过没有?如果试过,我就不试了直接给你分我将开帖子子给你100分作为酬谢。
原先可连接的客户和服务器《我设置“ 身份标识”为“启动用户”而非“交互式用户”》就说类没有找到。


加载更多回复(51)
Delphi中制作DLL •一 Dll的制作一般分为以下几步: 1 在一个DLL工程里写一个过程或函数 2 写一个Exports关键字,在其下写过程的名称。不用写参数和调用后缀。 二参数传递 1 参数类型最好与window C++的参数类型一致。不要用DELPHI的数据类型。 2 最好有返回值[即使是一个过程],来报出调用成功或失败,或状态。成功或失败的返回值最好为1[成功]或0[失败].一句话,与windows c++兼容。 3 用stdcall声明后缀。 4 最好大小写敏感。 5 无须用far调用后缀,那只是为了与windows 16位程序兼容。 三 DLL的初始化和退出清理[如果需要初始化和退出清理] 1 DLLProc[SysUtils单元的一个Pointer]是DLL的入口。在此你可用你的函数替换了它的入口。但你的函数必须符合以下要求[其实就是一个回调函数]。如下: procedure DllEnterPoint(dwReason: DWORD);far;stdcall; dwReason参数有四种类型: DLL_PROCESS_ATTACH:进程进入时 DLL_PROCESS_DETACH进程退出时 DLL_THREAD_ATTACH 线程进入时 DLL_THREAD_DETACH 线程退出时 在初始化部分写: DLLProc := @DLLEnterPoint; DllEnterPoint(DLL_PROCESS_ATTACH); 2 如Form上有TdcomConnection组件,就Uses Activex,在初始化时写一句CoInitialize (nil); 3 在退出时一定保证DcomConnection.Connected := False,并且数据集已关闭。否则报地址错。 四全局变量的使用 在widnows 32位程序中,两个应用程序的地址空间是相互没有联系的。虽然DLL在内存中是一份, 但变量是在各进程的地址空间中,因此你不能借助dll的全局变量来达到两个应用程序间的数据 传递,除非你用内存映像文件。 五、其他:调用方式按照标准的Windows调用方式. 六、关于参数传递 •Delphi程序之间调用DLL,如果要用String类型的话,要在引用的单元加上ShareMem 单元。 •如果Delphi写的DLL供其他开发工具使用的话,不要使用String类型,用PAnsiChar类型。 尽量使用标准DLL接口。指的是传递的参数类型及函数返回类型不能是Delphi特有的, 比如string(AnsiString),以及动态数组和含有这些类型成员的复合类型(如记录),也不 能是包含有这些类型成员数据成员的对象类型,以避免可能的错误。如果使用了string类型或 动态数组类型,且调用方不是Delphi程序,则基本上会报错。如果调用方是Delphi但调用方或 被调用方没有在工程文件的第一包含单元不是ShareMem,也可能会出错。 七、关于回调Funciton 你可以把Callback函数看作是一种特殊的消息响应函数,一般来说我们不会自己调用这种函数, 而是有某些系统函数调用,而且不需要向后传递消息。 只要象C/C++这样支持函数指针的语言都 有回调函数的概念,它实际上是向被调用函数传一个你的函数地址,然后被调用函数向通过你传 入的函数地址来调用你的函数 。 以上是结构化回调,到高级语言Object Pascal、C++中回调函数并没有退出,反而得到延伸与 扩展,在面向对像中的回调,其实是指面向对像中类对像的事件,事件就是原始的回调函数。面 向对像, 将回调函数定义成事件过程,在程序引用对像时,若指定了对像的过程事件后,那么在 要进行事件触发的地方检查事件过程是否分配,如果分中的就执行事,也就是执行了回调函数。

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧