直接写注册表来注册DCOM Server,要修改那些键、值? 急、急

时间:2022-11-16 15:35:16
 
一个项目马上交付使用,
客户提出在任意一台机器能直接运行Client端,
我想通过直接写注册表来注册DCOM Server

初步设想:
1、通过一个注册表工具来对比,注册DCOM Server前后的变化,
2、取出变化的部分再写入注册表,
但并不成功。
那位大侠请多多指教!
 
 

7 个解决方案

#1


客户端只须注册DCOM的代理模块

它与普通的COM一样注册。

NoRemove CLSID
ForceRemove {B1ECFE24-1373-11D4-8A45-00805FB6680E} = s 'Your Class'
{
InprocServer32 = s '%MODULE%'
}

这里InprocServer32 写入你的动态库路径

一般来说如果使用CLSID来创建的话这样就够了
如果要用ProgID来创建
加入PropID
在ROOT下
YourPropID = s 'Your ProgID'
{
CLSID = s '{B1ECFE24-1373-11D4-8A45-00805FB6680E}'
}
这里的CLSID与上面相同

#2


你用的是远程自动化还是DCOM?

#3


to softdoctor : 能否更详细一点。
to 是DCOM

已有较好的解决方案:
1、通过FTP下栽DCOMServer.TLB
2、通过程序注册TLB。
搞定!

#4



不用下载什么DCOMServer.TLB

上面我所说的方法是直接修改注册表

其实调用你的DCOM代理模块的DllRegisterServer就可以了

调用方法与调用普通动态库是一样的。

#5


Thanks, softdoctor !

也许我没有讲清楚,或没有理解你
我的意思是client端根本就没有DCOMServer.dll or DCOMServer.exe,只有IE;

也就无法调用DCOM代理模块(的DllRegisterServer)

我是通过一个OCX嵌入html,并通过WEB服务器下载DCOMServer.TLB、Client端程序 ,
来实现注册、初始化,并启动client与DCOMServer.exe相连,

#6


如果是IE的话,更简单了

在网页上你的OBJECT的CODEBASE属性设为
"http://www.youweb.com.cn/download/youdll.ocx"

"http://www.youweb.com.cn/download/youdll.cab"
如果客户机器上没有该控件浏览器将自动下载安装。
cab是你控件的打包文件,IE支持cab,可大大加快下载速度。

无论是DLL,OCX都必须有数字签名,否则浏览器安全检验通不过
除非客户将你的站点设为信任站点或将INTERNET安全级别设为
最底。

你的OCX必须支持自注册DllRegisterServer,IE将调用它。

你可能是用Delphi开发的,其实你的OCX里已经包含了DCOM代理模块,
如果不是这样,那一定有一个代理Dll。没有代理模块,DCOM怎么可能
运行?除非你用Socket

#7


谢谢softdoctor:

我确实是用Delphi 开发的,且并没有采用Socket

你说的DCOM代理模块是指DCOMServer.dll 、DCOMServer.tlb or DCOMServer.exe ?

我的OCX主要实现,
1、通过FTP下载DCOMServer.TLB、Client.exe,
2、实现注册Dcomserver
3、必要的初始化
4、并启动client.exe与DCOMServer.exe相连, 
但其本身并没有DCOM代理模块,
 right?

另:请教如何让DLL,OCX都有数字签名,或通过调用 MSHTML_TLB 的interface设置IE
    的安全级别 ?

#1


客户端只须注册DCOM的代理模块

它与普通的COM一样注册。

NoRemove CLSID
ForceRemove {B1ECFE24-1373-11D4-8A45-00805FB6680E} = s 'Your Class'
{
InprocServer32 = s '%MODULE%'
}

这里InprocServer32 写入你的动态库路径

一般来说如果使用CLSID来创建的话这样就够了
如果要用ProgID来创建
加入PropID
在ROOT下
YourPropID = s 'Your ProgID'
{
CLSID = s '{B1ECFE24-1373-11D4-8A45-00805FB6680E}'
}
这里的CLSID与上面相同

#2


你用的是远程自动化还是DCOM?

#3


to softdoctor : 能否更详细一点。
to 是DCOM

已有较好的解决方案:
1、通过FTP下栽DCOMServer.TLB
2、通过程序注册TLB。
搞定!

#4



不用下载什么DCOMServer.TLB

上面我所说的方法是直接修改注册表

其实调用你的DCOM代理模块的DllRegisterServer就可以了

调用方法与调用普通动态库是一样的。

#5


Thanks, softdoctor !

也许我没有讲清楚,或没有理解你
我的意思是client端根本就没有DCOMServer.dll or DCOMServer.exe,只有IE;

也就无法调用DCOM代理模块(的DllRegisterServer)

我是通过一个OCX嵌入html,并通过WEB服务器下载DCOMServer.TLB、Client端程序 ,
来实现注册、初始化,并启动client与DCOMServer.exe相连,

#6


如果是IE的话,更简单了

在网页上你的OBJECT的CODEBASE属性设为
"http://www.youweb.com.cn/download/youdll.ocx"

"http://www.youweb.com.cn/download/youdll.cab"
如果客户机器上没有该控件浏览器将自动下载安装。
cab是你控件的打包文件,IE支持cab,可大大加快下载速度。

无论是DLL,OCX都必须有数字签名,否则浏览器安全检验通不过
除非客户将你的站点设为信任站点或将INTERNET安全级别设为
最底。

你的OCX必须支持自注册DllRegisterServer,IE将调用它。

你可能是用Delphi开发的,其实你的OCX里已经包含了DCOM代理模块,
如果不是这样,那一定有一个代理Dll。没有代理模块,DCOM怎么可能
运行?除非你用Socket

#7


谢谢softdoctor:

我确实是用Delphi 开发的,且并没有采用Socket

你说的DCOM代理模块是指DCOMServer.dll 、DCOMServer.tlb or DCOMServer.exe ?

我的OCX主要实现,
1、通过FTP下载DCOMServer.TLB、Client.exe,
2、实现注册Dcomserver
3、必要的初始化
4、并启动client.exe与DCOMServer.exe相连, 
但其本身并没有DCOM代理模块,
 right?

另:请教如何让DLL,OCX都有数字签名,或通过调用 MSHTML_TLB 的interface设置IE
    的安全级别 ?