分布式组件对象Distribute Component Object Model(DCOM)的配置
上海博达数据通信有限公司 VOIP项目部 龚超
一. 进程内组件(DLL)的配置
1) 组件端(Component)或服务器端(Server)的配置(远程)
以Windows XP系统为例.
a)书写并用MIDL编译IDL和组件代码生成*.h,dlldata.c,*_i.c,*_p.c,*.tlb等文件
b)写*.def文件格式如下:
c) 书写*.mk文件格式如下用来编译残根(Stub)和代理(Proxy)
d)用nmake /f *.mk编译上述的MK文件编译生成残根(Stub)和代理(Proxy)
e)编译组件代码生成组件(DLL)
f)用regsvr32 *.dll注册组件
g) 用regsvr32 stub/proxy.dll注册代理
h) 用regedit.exe打开注册表,并用GuidGen.exe生成一个ID
{8AF1E59E-D92F-41ac-A190-482FE0E7035A}
在注册表项[HKEY_CLASSES_ROOT/AppID]下面新建一个项名字为{8AF1E59E-D92F-41ac-A190-482FE0E7035A},并在下面新建一个字串命名为DllSurrogate,其数据可命名为自己编写的代理托管程序的路径及程序名,或为空(表示使用系统默认的代理托管程序dllhost.exe)如图:
I)进到注册表的[HKEY_CLASSES_ROOT/CLSID]键下,找到注册组件的GUID打开GUID,新建一个字串名AppID,数据为h)步骤生成的GUID,同样在他的代理残根键下也新建一个字串名AppID,数据为h)步骤生成的GUID.
CLSID健中不能设置LocalServer32、LocalServer、LocalService等子健。CLSID中要包含InProcServer32子健.
在代理残根(STUB/PROXY)的InProcServer32中,其内键値为所在服务器注册的代理残根的DLL的路径。
在组件侧CLSID中的InProcServer32中的默认路径为组件的路径。
j)运行Dcomcnfg.exe进行DCOM配置.出现界面
选中h)步骤生成的GUID.右键点属性
自定义中加入GUEST帐户,且GUEST帐户不能被禁用.
k)本机运行客户程序进行测试.
l)组件ID参考下图:
m)如果有多个组件需要配置请重复步骤I)
n)如果要生成多个APPID请重复步骤h)---k)
2) 调用端或客户端(Client)的配置
以Windows98配置为例;
a) 用regsvr32 *.dll注册组件
b)用regsvr32 stub/proxy.dll注册代理
c)用regedit.exe打开注册表,进入AppID键项,在注册表项[HKEY_CLASSES_ROOT/AppID]下面新建上面组件端生成的GUID如{8AF1E59E-D92F-41ac-A190-482FE0E7035A},并在下面新建一个字串命名为RemoteServerName,远程组件所在的机器名如//GC如图:
d):进到注册表的[HKEY_CLASSES_ROOT/CLSID]键下,找到注册组件的GUID打开GUID,新建一个字串名AppID,数据为组件端配置h)步骤生成的GUID,同样在他的代理残根键下也新建一个字串名AppID,数据为组件端配置h)步骤生成的GUID{8AF1E59E-D92F-41ac-A190-482FE0E7035A}.如图
e)删除组件对应键下InProcServer32项下的默认值即本地组件的地址(清空)如图
f)保留残根/代理的InProcServer32下默认的代理地址如图
g) CLSID健中不能设置LocalServer32、LocalServer、LocalService等子健。CLSID中要包含InProcServer32子健.
h)运行Dcomcnfg.exe进行DCOM配置.出现界面依次配置
后面为点Property后出现:
i)配置完成,本机运行客户程序进行测试.
j)如果有多个组件需要配置请重复步骤d)—g)
k)如果要生成多个APPID请重复步骤c)---h)
二. 进程外组件(EXE)的配置
1) 组件端配置
以Windows XP系统为例.
同进程内组件端j)---k)
2) 客户端配置:
以Windows 98系统为例.
运行进程外组件进行自注册,或运行命令*.exe /regserver
然后:
后面为点Property后出现:
配置完成,本机运行客户程序进行测试.