一个项目马上交付使用,
客户提出在任意一台机器能直接运行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与上面相同
它与普通的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。
搞定!
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相连,
也许我没有讲清楚,或没有理解你
我的意思是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
在网页上你的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
的安全级别 ?
我确实是用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与上面相同
它与普通的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。
搞定!
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相连,
也许我没有讲清楚,或没有理解你
我的意思是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
在网页上你的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
的安全级别 ?
我确实是用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
的安全级别 ?