兄弟,朋友们,一定要帮我,急着救命的,帮帮我

时间:2021-02-22 19:51:39
我写了一个ocx控件,其中用到msinet.ocx和cmddlg.ocx两个引用控件,在客户端(IE)调用的时候,如果客户端装了VB,就可以用,而没有装VB,则不能用,经过我调试,发现区别就是装了VB的电脑,就有msinet.ocx和cmddlg.ocx这两个控件,那么运行我写的那个ocx就很正常,没有这两个控件,就不能运行我的控件。

我用了同事的方法,用VB的打包工具,把运行我写的控件所需要的msinet.ocx和cmddlg.ocx等控件,全部打包,就有了一个.cab的压缩包,而且有一个实例.htm,但还是不行。

那个兄弟有办法,赶快帮我,我没有分,我只能说声谢谢!!

我的E-MAIL: tian_wj@21cn.com
直接在这里答复也可以,急。。。。。。。。。。。。

27 个解决方案

#1


必须要数字签证后,再生成.cab包。客户端才会信任下载,否则客户端要设置IE的选项

#2


数字签名怎么做啊?

#3


老大,我知道,这个环节我知道,我就是说客户端已经把安全级别给调好了,但还是不行,现在问题的关键就是客户端怎么样才去调用.cab包,按道理说,应该会自动去调用.cab包里的那几个.ocx,但就是不调用阿。。。。。。。。。

#4


不知道版主都去那里了,这里都没有人解答问题了,唉。。。。。。。。。。。。。。。。。。。。。。。。。。。

#5


关注1!

#6


打包向导给的那个htm文件就有代码啊

#7


谁让你选择VB做开发工具呢!如果是win95或win98下用vb6以上开发工具做麻烦更多(VB动态链接库都没有)!用delphi写吧!

#8


而且你要让用户安装msinet.ocx和cmddlg.ocx应该在调用你的OCX的页面之前运行!

#9


可以用codebase设定下载控件的地址

#10


兄弟,我知道打包以后那个代码,但不行啊。我只要在客户端把msinet.ocx和comdlg32.ocx删除,就不能运行,我也用了codebase来指向那个cab的压缩包,但还是不行啊。我现在想用fso先判断客户端有没有那两个文件,如果没有,我就拷贝过去,你们看行不行的通?

#11


把你的cab中的INF文件内容和你的html page贴出来看看. 

#12


好:.inf
;INF file for VideoFtp.ocx
;DestDir can be 10 for Windows directory, 11 for Windows\System(32) directory, or left blank for the Occache directory.

[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[DefaultInstall]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[RInstallApplicationFiles]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[DestinationDirs]
install.files=11
[SourceDisksNames]
1=%DiskName%,VideoFtp.CAB,1

[Add.Code]
VideoFtp.ocx=VideoFtp.ocx
msado20.tlb=msado20.tlb
scrrun.dll=scrrun.dll
msvcrt.dll=msvcrt.dll
DLGOBJS.DLL=DLGOBJS.DLL
MSINET.OCX=MSINET.OCX
mscomctl.ocx=mscomctl.ocx
COMDLG32.OCX=COMDLG32.OCX
MSSTKPRP.DLL=MSSTKPRP.DLL
msvbvm60.dll=msvbvm60.dll
OLEAUT32.DLL=OLEAUT32.DLL
OLEPRO32.DLL=OLEPRO32.DLL
ASYCFILT.DLL=ASYCFILT.DLL
STDOLE2.TLB=STDOLE2.TLB
COMCAT.DLL=COMCAT.DLL
[install.files]
VideoFtp.ocx=VideoFtp.ocx
msado20.tlb=msado20.tlb
scrrun.dll=scrrun.dll
msvcrt.dll=msvcrt.dll
DLGOBJS.DLL=DLGOBJS.DLL
MSINET.OCX=MSINET.OCX
mscomctl.ocx=mscomctl.ocx
COMDLG32.OCX=COMDLG32.OCX
MSSTKPRP.DLL=MSSTKPRP.DLL
msvbvm60.dll=msvbvm60.dll
OLEAUT32.DLL=OLEAUT32.DLL
OLEPRO32.DLL=OLEPRO32.DLL
ASYCFILT.DLL=ASYCFILT.DLL
STDOLE2.TLB=STDOLE2.TLB
COMCAT.DLL=COMCAT.DLL
[SourceDisksFiles]
VideoFtp.ocx=1
msado20.tlb=1
scrrun.dll=1
msvcrt.dll=1
DLGOBJS.DLL=1
MSINET.OCX=1
mscomctl.ocx=1
COMDLG32.OCX=1
MSSTKPRP.DLL=1
msvbvm60.dll=1
OLEAUT32.DLL=1
OLEPRO32.DLL=1
ASYCFILT.DLL=1
STDOLE2.TLB=1
COMCAT.DLL=1

[VideoFtp.ocx]
file-win32-x86=thiscab
RegisterServer=yes
clsid={3C172CA1-DD72-4D4F-8D60-3D55146AA35E}
DestDir= 
FileVersion=1,0,0,0

[msado20.tlb]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=2,60,6526,0

[scrrun.dll]
file-win32-x86=thiscab
RegisterServer=yes
clsid={EE09B103-97E0-11CF-978F-00A02463E06F}
DestDir=11
FileVersion=5,6,0,6626

[msvcrt.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=6,1,8924,0

[DLGOBJS.DLL]
file-win32-x86=thiscab
RegisterServer=yes
clsid={B5F0ED00-D423-11CE-943D-00AA0062BE57}
DestDir=11
FileVersion=4,0,1,23

[MSINET.OCX]
file-win32-x86=thiscab
RegisterServer=yes
clsid={48E59293-9880-11CF-9754-00AA00C00908}
DestDir=11
FileVersion=6,0,81,69

[mscomctl.ocx]
file-win32-x86=thiscab
RegisterServer=yes
clsid={1EFB6596-857C-11D1-B16A-00C0F0283628}
DestDir=11
FileVersion=6,0,84,98

[COMDLG32.OCX]
file-win32-x86=thiscab
RegisterServer=yes
clsid={F9043C85-F6F2-101A-A3C9-08002B2F49FB}
DestDir=11
FileVersion=6,0,81,69

[MSSTKPRP.DLL]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=6,0,81,69

[msvbvm60.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=6,0,84,95

[OLEAUT32.DLL]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=2,40,4517,0

[OLEPRO32.DLL]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=5,0,4517,0

[ASYCFILT.DLL]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=2,40,4517,0

[STDOLE2.TLB]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=2,40,4517,0

[COMCAT.DLL]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=4,71,1460,1
[RegisterFiles]
%11%\COMCAT.DLL
%11%\OLEPRO32.DLL
%11%\OLEAUT32.DLL
%11%\msvbvm60.dll
%11%\MSSTKPRP.DLL
%11%\COMDLG32.OCX
%11%\mscomctl.ocx
%11%\MSINET.OCX
%11%\DLGOBJS.DLL
%11%\scrrun.dll
%11%\msado20.tlb
%11%\VideoFtp.ocx

Html:
<HTML>
<HEAD>
<TITLE>VideoFtp.CAB</TITLE>
</HEAD>
<BODY>
<!-- If any of the controls on this page require licensing, you must
create a license package file. Run LPK_TOOL.EXE to create the
required LPK file. LPK_TOOL.EXE can be found on the ActiveX SDK,
http://www.microsoft.com/intdev/sdk/sdk.htm. If you have the Visual
Basic 6.0 CD, it can also be found in the \Tools\LPK_TOOL directory.

The following is an example of the Object tag:

<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
</OBJECT>
-->

<OBJECT ID="FTP"
CLASSID="CLSID:3C172CA1-DD72-4D4F-8D60-3D55146AA35E"
CODEBASE="VideoFtp.CAB#version=1,0,0,0">
</OBJECT>
</BODY>
</HTML>

希望兄弟能帮我!

#13


兄弟们,帮我阿

#14


你应该把lpk文件也放在www上

#15


>>我只要在客户端把msinet.ocx和comdlg32.ocx删除,就不能运行,我也用了codebase来指向那个cab的压缩包,但还是不行啊。
直接删除当然不行,因为注册表中已经有这个控件了(但却找不到相应的文件),IE会认为不必下载.正确的测试方法是用regsvr32 /u 反注册.

#16


</OBJECT><OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331" VIEWASTEXT id="Microsoft_Licensed_Class_Manager_1_0"1>
<PARAM NAME="LPKPath" VALUE="lpkFileName.lpk">
</OBJECT>
在要使用组件的页面上加入上述代码即可!
(生成ipk文件的东东可到microsoft上去下载)

#17


上面的兄弟,你可以给我说说.lpk是什么东东?是不是用户签名的东东!!

</OBJECT><OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331" VIEWASTEXT id="Microsoft_Licensed_Class_Manager_1_0"1>
        <PARAM NAME="LPKPath" VALUE="lpkFileName.lpk">
</OBJECT>
这个东西有什么用!!!

同时,只要在客户端有msinet.ocx和comdlg32.ocx这两个组件,我就可以运行,而
不需要你说的那个.lpk文件,
可以给我解答吗?谢谢!

#18


安装一个支持程序VBCCE(Visual Basic Control Create Edition),去download一个。

#19


你这样做恐怕不行吧,有人用你的东西就会使系统更庞大,不符合客户至上的原则,想其它的办法吧,是你要服务客户,不是客户迁就你,如果是我,决不会为了浏览网页而下载控件什么的,

#20


你站在访问者的角度想想吧

#21


唉,我把我的目的说一下吧:
我用OCX做了一个上传很大的视频文件,用的ftp的协议!
如果用http的话,太大,不行,而我这个ocx,就用到msinet.ocx和comdlg32.ocx

然后就不行,就这么简单,你们有什么好建议,可以上传大的文件!!

#22


用VS6的工具可以解决

#23


我曾经尝试过发布自己的控件,包括ActiveX文档,但是就是不成功,不是不会,各种方法都尝试了,什么Codebase之类的,最后还是放弃在Web中使用自己的控件,实际上许多问题都可以绕过控件,实在不行做个客户端工具让用户自己下载安装。

#24


由于ActiveX控件的特性:在<object>标签内指定clsid,如果系统中没有这个控件或版本号低于指定的则会从codebase所指定的位置下载并安装该控件。
所以这个问题可以这样试一试:
先将需要的两个控件在页面上用用两个<object>标签声明,不要添版本号,但要指定codebase,并加上属性 style="display:none"或参数标签 <param name="visible" value="false">
然后,在用一个<object>标签加入你所写的ocx.
由于web的顺序读取执行,如果客户端系统上没有第一个或第二个控件则它们会在遇到前两个<object>标签时下载你的cab文件,并注册;如果客户端系统上已经存在了这两个控件,由于你没有指定版本号,所以系统会忽略。当遇到第三个<object>时,系统会进行注册,如果改cab已经下载系统只进行注册,如果尚未下载则系统会下载并注册。

最后祝你好运。

#25


我想可能还是客户端浏览器安全设置的问题,如果安全级别设得比较高,浏览器会拒绝下载任何东西,另外下载控件时会出现提示,用户如果不知道一般都会选择取消,那更出不来了,你可以找台出不来的机子试试,降低它的安全级别,看行不行.
楼上说的也有道理,你可以把客户端机器系统目录下的Document Setting目录内(WIN2000下)的已下载插件删除试试,或者在编译时提高版本号(一般在编译时会自动修改的).
至于数字签名,因特网上证书是要申请的,那可是要付出美金的!呵呵

#26


ocx控件光打包不行还必须注册呢

#27


yayv(yayv),你厉害,方法好!

我们公司的微软顾问也这样建议,呵呵,但是他建议最好用vc写,当然这个方法是个权宜之计!谢谢

#1


必须要数字签证后,再生成.cab包。客户端才会信任下载,否则客户端要设置IE的选项

#2


数字签名怎么做啊?

#3


老大,我知道,这个环节我知道,我就是说客户端已经把安全级别给调好了,但还是不行,现在问题的关键就是客户端怎么样才去调用.cab包,按道理说,应该会自动去调用.cab包里的那几个.ocx,但就是不调用阿。。。。。。。。。

#4


不知道版主都去那里了,这里都没有人解答问题了,唉。。。。。。。。。。。。。。。。。。。。。。。。。。。

#5


关注1!

#6


打包向导给的那个htm文件就有代码啊

#7


谁让你选择VB做开发工具呢!如果是win95或win98下用vb6以上开发工具做麻烦更多(VB动态链接库都没有)!用delphi写吧!

#8


而且你要让用户安装msinet.ocx和cmddlg.ocx应该在调用你的OCX的页面之前运行!

#9


可以用codebase设定下载控件的地址

#10


兄弟,我知道打包以后那个代码,但不行啊。我只要在客户端把msinet.ocx和comdlg32.ocx删除,就不能运行,我也用了codebase来指向那个cab的压缩包,但还是不行啊。我现在想用fso先判断客户端有没有那两个文件,如果没有,我就拷贝过去,你们看行不行的通?

#11


把你的cab中的INF文件内容和你的html page贴出来看看. 

#12


好:.inf
;INF file for VideoFtp.ocx
;DestDir can be 10 for Windows directory, 11 for Windows\System(32) directory, or left blank for the Occache directory.

[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[DefaultInstall]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[RInstallApplicationFiles]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[DestinationDirs]
install.files=11
[SourceDisksNames]
1=%DiskName%,VideoFtp.CAB,1

[Add.Code]
VideoFtp.ocx=VideoFtp.ocx
msado20.tlb=msado20.tlb
scrrun.dll=scrrun.dll
msvcrt.dll=msvcrt.dll
DLGOBJS.DLL=DLGOBJS.DLL
MSINET.OCX=MSINET.OCX
mscomctl.ocx=mscomctl.ocx
COMDLG32.OCX=COMDLG32.OCX
MSSTKPRP.DLL=MSSTKPRP.DLL
msvbvm60.dll=msvbvm60.dll
OLEAUT32.DLL=OLEAUT32.DLL
OLEPRO32.DLL=OLEPRO32.DLL
ASYCFILT.DLL=ASYCFILT.DLL
STDOLE2.TLB=STDOLE2.TLB
COMCAT.DLL=COMCAT.DLL
[install.files]
VideoFtp.ocx=VideoFtp.ocx
msado20.tlb=msado20.tlb
scrrun.dll=scrrun.dll
msvcrt.dll=msvcrt.dll
DLGOBJS.DLL=DLGOBJS.DLL
MSINET.OCX=MSINET.OCX
mscomctl.ocx=mscomctl.ocx
COMDLG32.OCX=COMDLG32.OCX
MSSTKPRP.DLL=MSSTKPRP.DLL
msvbvm60.dll=msvbvm60.dll
OLEAUT32.DLL=OLEAUT32.DLL
OLEPRO32.DLL=OLEPRO32.DLL
ASYCFILT.DLL=ASYCFILT.DLL
STDOLE2.TLB=STDOLE2.TLB
COMCAT.DLL=COMCAT.DLL
[SourceDisksFiles]
VideoFtp.ocx=1
msado20.tlb=1
scrrun.dll=1
msvcrt.dll=1
DLGOBJS.DLL=1
MSINET.OCX=1
mscomctl.ocx=1
COMDLG32.OCX=1
MSSTKPRP.DLL=1
msvbvm60.dll=1
OLEAUT32.DLL=1
OLEPRO32.DLL=1
ASYCFILT.DLL=1
STDOLE2.TLB=1
COMCAT.DLL=1

[VideoFtp.ocx]
file-win32-x86=thiscab
RegisterServer=yes
clsid={3C172CA1-DD72-4D4F-8D60-3D55146AA35E}
DestDir= 
FileVersion=1,0,0,0

[msado20.tlb]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=2,60,6526,0

[scrrun.dll]
file-win32-x86=thiscab
RegisterServer=yes
clsid={EE09B103-97E0-11CF-978F-00A02463E06F}
DestDir=11
FileVersion=5,6,0,6626

[msvcrt.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=6,1,8924,0

[DLGOBJS.DLL]
file-win32-x86=thiscab
RegisterServer=yes
clsid={B5F0ED00-D423-11CE-943D-00AA0062BE57}
DestDir=11
FileVersion=4,0,1,23

[MSINET.OCX]
file-win32-x86=thiscab
RegisterServer=yes
clsid={48E59293-9880-11CF-9754-00AA00C00908}
DestDir=11
FileVersion=6,0,81,69

[mscomctl.ocx]
file-win32-x86=thiscab
RegisterServer=yes
clsid={1EFB6596-857C-11D1-B16A-00C0F0283628}
DestDir=11
FileVersion=6,0,84,98

[COMDLG32.OCX]
file-win32-x86=thiscab
RegisterServer=yes
clsid={F9043C85-F6F2-101A-A3C9-08002B2F49FB}
DestDir=11
FileVersion=6,0,81,69

[MSSTKPRP.DLL]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=6,0,81,69

[msvbvm60.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=6,0,84,95

[OLEAUT32.DLL]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=2,40,4517,0

[OLEPRO32.DLL]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=5,0,4517,0

[ASYCFILT.DLL]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=2,40,4517,0

[STDOLE2.TLB]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=2,40,4517,0

[COMCAT.DLL]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=4,71,1460,1
[RegisterFiles]
%11%\COMCAT.DLL
%11%\OLEPRO32.DLL
%11%\OLEAUT32.DLL
%11%\msvbvm60.dll
%11%\MSSTKPRP.DLL
%11%\COMDLG32.OCX
%11%\mscomctl.ocx
%11%\MSINET.OCX
%11%\DLGOBJS.DLL
%11%\scrrun.dll
%11%\msado20.tlb
%11%\VideoFtp.ocx

Html:
<HTML>
<HEAD>
<TITLE>VideoFtp.CAB</TITLE>
</HEAD>
<BODY>
<!-- If any of the controls on this page require licensing, you must
create a license package file. Run LPK_TOOL.EXE to create the
required LPK file. LPK_TOOL.EXE can be found on the ActiveX SDK,
http://www.microsoft.com/intdev/sdk/sdk.htm. If you have the Visual
Basic 6.0 CD, it can also be found in the \Tools\LPK_TOOL directory.

The following is an example of the Object tag:

<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
</OBJECT>
-->

<OBJECT ID="FTP"
CLASSID="CLSID:3C172CA1-DD72-4D4F-8D60-3D55146AA35E"
CODEBASE="VideoFtp.CAB#version=1,0,0,0">
</OBJECT>
</BODY>
</HTML>

希望兄弟能帮我!

#13


兄弟们,帮我阿

#14


你应该把lpk文件也放在www上

#15


>>我只要在客户端把msinet.ocx和comdlg32.ocx删除,就不能运行,我也用了codebase来指向那个cab的压缩包,但还是不行啊。
直接删除当然不行,因为注册表中已经有这个控件了(但却找不到相应的文件),IE会认为不必下载.正确的测试方法是用regsvr32 /u 反注册.

#16


</OBJECT><OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331" VIEWASTEXT id="Microsoft_Licensed_Class_Manager_1_0"1>
<PARAM NAME="LPKPath" VALUE="lpkFileName.lpk">
</OBJECT>
在要使用组件的页面上加入上述代码即可!
(生成ipk文件的东东可到microsoft上去下载)

#17


上面的兄弟,你可以给我说说.lpk是什么东东?是不是用户签名的东东!!

</OBJECT><OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331" VIEWASTEXT id="Microsoft_Licensed_Class_Manager_1_0"1>
        <PARAM NAME="LPKPath" VALUE="lpkFileName.lpk">
</OBJECT>
这个东西有什么用!!!

同时,只要在客户端有msinet.ocx和comdlg32.ocx这两个组件,我就可以运行,而
不需要你说的那个.lpk文件,
可以给我解答吗?谢谢!

#18


安装一个支持程序VBCCE(Visual Basic Control Create Edition),去download一个。

#19


你这样做恐怕不行吧,有人用你的东西就会使系统更庞大,不符合客户至上的原则,想其它的办法吧,是你要服务客户,不是客户迁就你,如果是我,决不会为了浏览网页而下载控件什么的,

#20


你站在访问者的角度想想吧

#21


唉,我把我的目的说一下吧:
我用OCX做了一个上传很大的视频文件,用的ftp的协议!
如果用http的话,太大,不行,而我这个ocx,就用到msinet.ocx和comdlg32.ocx

然后就不行,就这么简单,你们有什么好建议,可以上传大的文件!!

#22


用VS6的工具可以解决

#23


我曾经尝试过发布自己的控件,包括ActiveX文档,但是就是不成功,不是不会,各种方法都尝试了,什么Codebase之类的,最后还是放弃在Web中使用自己的控件,实际上许多问题都可以绕过控件,实在不行做个客户端工具让用户自己下载安装。

#24


由于ActiveX控件的特性:在<object>标签内指定clsid,如果系统中没有这个控件或版本号低于指定的则会从codebase所指定的位置下载并安装该控件。
所以这个问题可以这样试一试:
先将需要的两个控件在页面上用用两个<object>标签声明,不要添版本号,但要指定codebase,并加上属性 style="display:none"或参数标签 <param name="visible" value="false">
然后,在用一个<object>标签加入你所写的ocx.
由于web的顺序读取执行,如果客户端系统上没有第一个或第二个控件则它们会在遇到前两个<object>标签时下载你的cab文件,并注册;如果客户端系统上已经存在了这两个控件,由于你没有指定版本号,所以系统会忽略。当遇到第三个<object>时,系统会进行注册,如果改cab已经下载系统只进行注册,如果尚未下载则系统会下载并注册。

最后祝你好运。

#25


我想可能还是客户端浏览器安全设置的问题,如果安全级别设得比较高,浏览器会拒绝下载任何东西,另外下载控件时会出现提示,用户如果不知道一般都会选择取消,那更出不来了,你可以找台出不来的机子试试,降低它的安全级别,看行不行.
楼上说的也有道理,你可以把客户端机器系统目录下的Document Setting目录内(WIN2000下)的已下载插件删除试试,或者在编译时提高版本号(一般在编译时会自动修改的).
至于数字签名,因特网上证书是要申请的,那可是要付出美金的!呵呵

#26


ocx控件光打包不行还必须注册呢

#27


yayv(yayv),你厉害,方法好!

我们公司的微软顾问也这样建议,呵呵,但是他建议最好用vc写,当然这个方法是个权宜之计!谢谢