之前有将VC++写的activex控件打包成CAB文件,放到网页中是能够提示下载的,用的方法是VS2005中添加一个新CAB工程,将ocx添加进去,编译之后就能用了。
后来我想使用一个C#写的activex控件,也是用同样的方法制作了CAB文件,网页中就没有任何反应。后来查了一些资料,知道需要先写一个INF文件,然后再将dll文件和这个INF一起添加制作成CAB文件,但仍旧没有反应,只有一个红叉。我的INF文件如下,其中HelloWord.dll是我用c#写的,中间用到了mediacontrol.dll。
[version]
signature="$SCHICAGO$"
AdvancedINF=2.0
[Add.Code]
HelloWord.dll = HelloWord.dll
mediacontrol.dll=mediacontrol.dll
[mediacontrol.dll]
file-win32-x86=thiscab
RegisterServer=yes
DestDir=11
FileVersion=5,4,17,11
[HelloWord.dll]
file-win32-x86=thiscab
clsid={048EB100-7186-4dde-8DB7-9116B3185F7F}
FileVersion=1,0,0,0
DestDir=11
RegisterServer=yes
;end of INF file
不知道问题出在了哪里,请大家帮忙,谢谢!
------解决方案--------------------------------------------------------
因为是.NET的控件,直接把那些 dll 装进 cab 不能发布,即使选择了 “Register for COM interop”。如果把 dll 放入msi, 然后封装成 cab,就能发布了。
参考:
http://www.codeproject.com/KB/cs/C__Deployment.aspx
------解决方案--------------------------------------------------------
WinTesst.inf文件 ;后表示注释
[Version]
signature="" ;支持Windows NT后所有的操作系统
AdvancedINF=2.0
[Add.Code] ;为要添加的内容
;=前面是要下载的文件名,后面是对应这个文件的区域名,可以是任何名字,不过一般都是和文件的名字相同
WebControl.dll=WebControl.dll ;包含的组件名
Chart.dll=Chart.dll
;需要注意是在[Add.Code]区出现的文件要根据依赖性进行排序
[WebControl.dll]
file-win32-x86=thiscab ;在当前的cab文件中得到dll
RegisterServer=yes ;自动注册
clsid={5B7E1537-103F-4484-8326-2AA643E4537F} ;类的CLSID
DestDir= ;默认目录C:\WINDOWS\Downloaded Program Files
FileVersion=1,0,0,0 ;版本号
[Chart.dll]
file-win32-x86=thiscab
RegisterServer=yes
clsid={}
DestDir=
FileVersion=
创建cab文件:
进入C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin>
cabarc N C:\test.cab C:\Chart.dll C:\WebControl.dll C:\WinTesst.inf
N表示要创建一个新的文件,test.cab 是创建的文件名,WinTesst.inf是cab的inf,后而是需要加到cab里的文件,可以使用通配符。
------解决方案--------------------------------------------------------
在工程里生成安装文件,再和INF文件一起打包,
INF文件只要这样写就行了:
[Version]
Signature="$CHICAGO$"
AdvancedINF=2.0
[Setup Hooks]
hook1=hook1
[hook1]
run=msiexec.exe /i "%EXTRACT_DIR%\xx.msi" /qr
打包:
cabarc.exe N xx.cab xx.msi xx.inf