所属分类:.NET技术 VC.NET
-----------------------------------------
用.net2005做了一个很简单的ActiveX控件,静态的,在2003的系统上可以跑,在XP下看到的就是个红叉。
我已经按照网上的方法做了安全接口,降低了IE的安全等级,添加了信任站点(非httpS认证),使用depends找到了ocx控件依赖的DLL并编写了inf文件,将它们打包成cab。
我唯一没做的就是签名。
我在测试机器上找到了那些原来不存在的依赖的DLL文件,在注册表里面也找到了被注册的控件,这证明cab包被正确运行了。
这个是什么问题啊,各位高手帮帮忙啊
:(
----------------------------------------------------------------------
inf文件如下:
---------------------------------------------------
[version]
signature="$CHINA$"
AdvancedINF=2.0
[Add.Code]
HelloAvtiveX.ocx=HelloAvtiveX.ocx
HelloAvtiveX.inf=HelloAvtiveX.inf
msvcr80.dll=msvcr80.dll
mfc80u.dll=mfc80u.dll
msvcp80.dll=msvcp80.dll
[msvcr80.dll]
file-win32-x86=thiscab
FileVersion=8,00,50727,42
DestDir=11
RegisterServer=yes
[mfc80u.dll]
file-win32-x86=thiscab
FileVersion=8,00,50727,42
DestDir=11
RegisterServer=yes
[msvcp80.dll]
file-win32-x86=thiscab
FileVersion=8,00,50727,42
DestDir=11
RegisterServer=yes
[HelloAvtiveX.ocx]
file=thiscab
clsid={A3B4C60F-24A7-40E8-A06B-1A5EFE5F0A43}
RegisterServer=yes
FileVersion=1,0,0,1
[HelloAvtiveX.inf]
file=thiscab
--------------------------------------------------------
连UP的人都没有啊。。。。。。
--------------------------------------------------------
我帮你up
--------------------------------------------------------
帮顶:
while(1)up;
先指出你的inf文件一点点问题:
1.
文件之间的先后顺序要根据dll、ocx之间的依赖关系排列,
比如:
[Add.Code]
HelloAvtiveX.ocx=HelloAvtiveX.ocx
HelloAvtiveX.inf=HelloAvtiveX.inf
msvcr80.dll=msvcr80.dll
mfc80u.dll=mfc80u.dll
msvcp80.dll=msvcp80.dll
该节中,放在前面的依赖于后面的,比如:如果HelloAvtiveX.ocx依赖于msvcp80.dll,则msvcp80.dll要放在后面,任何一个dll同;
2.
而紧接着的一节[xxx.dll]正好和上面[Add.Code]节的排列顺序反过来,比如你上面的[Add.Code]节最后一个一句是:msvcp80.dll=msvcp80.dll;那么就要先写
[msvcp80.dll]
file-win32-x86=thiscab
FileVersion=8,00,50727,42
DestDir=11
RegisterServer=yes
....
依此类推
[msvcr80.dll]
file-win32-x86=thiscab
FileVersion=8,00,50727,42
DestDir=11
RegisterServer=yes
[mfc80u.dll]
file-win32-x86=thiscab
FileVersion=8,00,50727,42
DestDir=11
RegisterServer=yes
[msvcp80.dll]
file-win32-x86=thiscab
FileVersion=8,00,50727,42
DestDir=11
RegisterServer=yes
[HelloAvtiveX.ocx]
file=thiscab
clsid={A3B4C60F-24A7-40E8-A06B-1A5EFE5F0A43}
RegisterServer=yes
FileVersion=1,0,0,1
3.
另外,有些dll是不需要注册的吧,可以设置RegisterServer=no
--------------------------------------------------------
还有要注意跟操作系统有关的,特别是2003/XP有区别的一些dll也要打包吧:)
--------------------------------------------------------
不好意思,再补充:
你的ActiveX控件是静态的?那么有些dll还是会动态连接进来的,这个时候也要打包到cab并且写入inf文件;建议你全部动态连接试试.
--------------------------------------------------------
好,我试试去
--------------------------------------------------------
不同的系统,可能需要打包的文件更多
--------------------------------------------------------
貌似还是不行啊
--------------------------------------------------------
需要数字签名的问题吧.
--------------------------------------------------------
非要数字签名么?那为什么有的2003的系统可以跑?
--------------------------------------------------------
帮顶下吧,各位
--------------------------------------------------------
ActiveX是用.net2005开发的
--------------------------------------------------------
不知道是不是和.net框架有关系,windows2003中集成了.net框架,但XP中没有
--------------------------------------------------------
友情帮顶,,是处女顶哦 ,我 刚申请的号 哈哈 ,多给点分啊
--------------------------------------------------------
和操作系统有关
--------------------------------------------------------
总结一下,所有的说法都不是正解。
最后我自己在测试服务器上安装了证书颁发的服务,给自己颁发了证书,但是在XP上仍然不能运行。最后我在XP的注册表里面找控件的GUID,但是什么都没找到,说明ocx控件并没被XP安装,这个问题描述错了,所以结贴了,我将另外开帖提问。