社区
ATL
帖子详情
cab中INF文件的编写
pf_ma
2001-07-02 04:09:26
我有两个文件,为GETCAST.OCX,GETCAST.DLL,当在网页上没有此控件时,则下载安装,在OBJECT里我已用了CODEBASE,但不正确,可能是我的INF文件写的不对,能帮我写这个INF文件吗?我的GETCAST.OCX调用了getcast.dll
...全文
1125
7
打赏
收藏
cab中INF文件的编写
我有两个文件,为GETCAST.OCX,GETCAST.DLL,当在网页上没有此控件时,则下载安装,在OBJECT里我已用了CODEBASE,但不正确,可能是我的INF文件写的不对,能帮我写这个INF文件吗?我的GETCAST.OCX调用了getcast.dll
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Areece
2002-05-01
打赏
举报
回复
怎么这么多人问这个问题,其实Cabinet SDK讲得还不错哦
1、如果需要创建cab文件,首先需要Cabarc或者Makecab,它们随着Cabinet SDK的安装就有了,Cabinet SDK的下载地址是http://msdn.microsoft.com/workshop/management/cab/cabdl.asp。
Cabarc可以创建、查看或者解出cab里面的文件,而Makecab则只可以用来创建cab文件。
2、制作cab文件时需要将所有的相关文件都包含进去,可以通过Depends(VC自带的)检查需要的文件。使用inf文件将这些东西都写进去。
3、inf搞法:inf文件描述cab中所有的ocx及dll文件,inf通过一些命名区域来提供需要的信息。
怎么写inf
最开始一般是[Version]区:
eg: [Version]
signature="$XXXX$"
AdvancedINF=2.0
接下来就是最重要的[Add.Code]区:
eg: [Add.Code]
Ctrl1.dll=C1Section
Ctrl2.dll=Ctrl2.dll
前面是要下载的文件名,后面是对应这个文件的区域名,可以是任何名字,不过一般都是和文件的名字相同,这样方便维护。还有需要注意是在[Add.Code]区出现的文件要根据依赖性进行排序,例如前面说的ctrl1.dll要依赖于ctrl2.dll,则ctrl2.dll要出现在ctrl1.dll的前面。因为安装时是按照相反的顺序进行的,也就是说先安装ctrl2.dll,然后才是ctrl1.dll,哧哧,记清楚了,不要搞反了。
再接下来是各个文件的区域了
[Ctrl1.dll]
file-win32-x86=thiscab
RegisterServer=yes
clsid={.....}
DestDir=
FileVersion=1,0,0,0
[Ctrl1.dll]区域中的第一个file值告诉ie到哪里去得到这个dll,file一共包括三个部分,第一部分是file,这个永远都是这样的(至少目前来说);第二部分告诉声明支持的OS,win32表示windows,mac就是苹果MAC OX了;第三部分是CPU类型,比如说x86、 ppc (Power PC)、 mips或者alpha了。
file的值可以取三个一个URL、ignore和thiscab,如果是URL则说明到URL所在的位置去下;如果是ignore说明对于这种OS和CPU,不需要下载这个文件(ctrl1.dll);如果是thiscab很明显就在当前的cab文件中了。
接下来是RegisterServer,可以取两个值yes和no,如果为yes则说明ie要注册该dll,如果是no就不必了;
再下来是DestDir,它的值是dll将要存到本地硬盘的位置,如果它的值是10,则将dll放到\Windows或者\WinNT下;如果是11,则放到\Windows\System或者
\WinNT\System32下;如果是空(就是没有值)则会放到\Windows或者\WinNT下的Downloaded Program Files目录下;
最后是FileVersion,这个就比较明显了,说明了ctrl1.dll的版本号。
有时候我们使用VB来开发控件的时候,需要将VB的虚拟机装上去,它需要一些其它的说明的,简单地讲一下吧:
在[Add.Code]中增加一项MSVBVM60.DLL=MSVBVM60.DLL(以VB6为例)下面是
MSVBVM60.DLL区域:
[MSVBVM60.DLL]
hook=MSVBVM60.cab_Installer
FileVersion=6,0,81,76
FileVersion很明显,是版本号,就不再说发,就说说hook吧。
hook区域是在安装的时候需要执行的区域,它分为两种,一种是有条件的,另外一种是无条件的,无条件的hook区域是必须执行的,反之则根据条件判断是否执行。以[Setup Hooks]标记的区域是无条件区域,如下所示
[Setup Hooks]
hookname=section-name
[section-name]
run=%EXTRACT_DIR%\setup.exe
无条件区域常用来通过一个inf文件执行一个安装程序,这就是我们在资源管理器右键点击一个inf文件时在执行安装这样的菜单的原因了
当ie下载了一个cab文件,如果文件中没有[Add.Code],则处理[Setup Hooks]区域,运行run所指定程序,哧哧,上面就是setup.exe;
条件区域则为在一定条件下执行,前面为MSVBVM60.DLL指定的hook区域就是一个条件区域,如果在MSVBVM60.DLL指定的CLSID或者version不能满足需要而且没有file这个命名值,则执行hook所指定的区域。
[MSVBVM60.cab_Installer]
file-win32-x86=http://activex.microsoft.com/controls/vb6/VBRun60.cab
run=%EXTRACT_DIR%\VBRun60.exe
上面[MSVBVM60.cab_Installer]是一个hook区域,它也包含了一个file值,指定一个URL,表示MSVBVM60.DLL可以从这个URL下载得到;run则说明了执行哪一个文件
这里有必要说明一下的是,MS对一些常用的Redistributable Microsoft DLLs
可以通过指定CODEBASE属性为http://activex.microsoft.com/controls,这样在cab文件中就中需要包含这些文件,在计算机上有一个文件redist.txt上面的dll就是Redistributable Microsoft DLLs
创建一个cab文件:
cabarc N ctrl1.cab ctrl1.inf ctrl1.dll
N表示要创建一个新的文件,ctrl1.cab是创建的文件名,ctrl1.inf是cab的inf,后而是需要加到cab里的文件,可以使用通配符。
然后就可以将cab文件放到网页上了
<OBJECT ID="Ctrl1Obj"
CLASSID="clsid:....................................."
CODEBASE="http://server.com/ctrl1.cab#version=8,0,0,5007">
</OBJECT>
这里也在一个version,不过这里的version是指控件的version,而inf里的是文件的version。
制作电子签名:
首先从下面的网址下载制作签名的工具SignCode,地址是
http://msdn.microsoft.com/workshop/gallery/tools/authenticode/authcode.asp
从签名授权中心如VeriSign或者你的局域网上运行的Microsoft Certificate
Server授权服务器得到一个certificate,在申请授权的过程你会得到一个私钥。
也可以使用MakeCert.exe和Cert2Spc.exe创建的私钥进行测试,方法是首先使用MakeCert创建一个X.509的certificate(.cer文件)
MakeCert -sv MyKey.pvk n "CN=My Software Company" MyCert.cer
然后利用Cert2Spc将.cer文件转换成为PKCS #7软件发布Certificate(.spc文件),
Cert2Spc MyCert.cer MyCert.spc
利用你下载的SignCode对你的cab文件进行电子签名
SignCode -spc MyCert.spc -v MyKey.pvk -t http://
timestamp.verisign.com/scripts/timstamp.dll ctrl1.cab
SignCode还可以指定一些其它的参数,就不说了,太长了,哧哧。
虽然可以利用测试的.cer和.spc文件,但是在发布的时候,必须申请。
其实东西在SDK中都有说明,不过都是E文的,慢慢看就没有什么发
highw
2001-07-03
打赏
举报
回复
给你一个cb自动生成的.inf文件
;C++Builder-generated INF file for luruProj.ocx
[Add.Code]
luruProj.ocx=luruProj.ocx
borlndmm.dll=borlndmm.dll
cp3245mt.dll=cp3245mt.dll
Vcl40.bpl=Vcl40.bpl
vcljpg40.bpl=vcljpg40.bpl
Vclmid40.bpl=Vclmid40.bpl
Vcldb40.bpl=Vcldb40.bpl
[luruProj.ocx]
file=http:/10.10.10.99/luruProj.ocx
clsid={844817E5-BEF1-11D4-A5FF-0000250169F7}
RegisterServer=yes
FileVersion=1,0,0,0
[borlndmm.dll]
file=http:/10.10.10.99/borlndmm.dll
FileVersion=4,0,14,4
DestDir=11
[cp3245mt.dll]
file=http:/10.10.10.99/cp3245mt.dll
FileVersion=4,80,0,0
[Vcl40.bpl]
file=http:/10.10.10.99/Vcl40.bpl
FileVersion=4,0,5,106
DestDir=11
[vcljpg40.bpl]
file=http:/10.10.10.99/vcljpg40.bpl
FileVersion=4,0,5,104
DestDir=11
[Vclmid40.bpl]
file=http:/10.10.10.99/Vclmid40.bpl
FileVersion=4,0,5,107
DestDir=11
[Vcldb40.bpl]
file=http:/10.10.10.99/Vcldb40.bpl
FileVersion=4,0,5,104
DestDir=11
sjxf
2001-07-02
打赏
举报
回复
如果你的codebase属性确保写的正确的话,可以试试把inf文件的getcast.dll属性节中
getcast.dll的下载存放路径加上,例如
;plugin.dll 的 INF 文件
;DestDir 可以为 10 则在 Windows 目录,为 11 则在 Windows\System(32) 目录,或为空则在 Occache 目录。
[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[DefaultInstall]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[RInstallApplicationFiles]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
[DestinationDirs]
install.files=10
[SourceDisksNames]
1=%DiskName%,plugin.CAB,1
[Add.Code]
plugin.dll=plugin.dll
wbspkzt570.driver=wbspkzt570.driver
wbsrdzt600.driver=wbsrdzt600.driver
wbsptpr2.driver=wbsptpr2.driver
MSCOMM32.ocx=MSCOMM32.ocx
[install.files]
plugin.dll=plugin.dll
wbspkzt570.driver=wbspkzt570.driver
wbsrdzt600.driver=wbsrdzt600.driver
wbsptpr2.driver=wbsptpr2.driver
MSCOMM32.ocx=MSCOMM32.ocx
[SourceDisksFiles]
plugin.dll=1
wbspkzt570.driver=1
wbsrdzt600.driver=1
wbsptpr2.driver=1
MSCOMM32.ocx=1
[plugin.dll]
file-win32-x86=thiscab
RegisterServer=yes
clsid={D4D726E7-C710-40CC-A4BB-1DD217A5BFBF}
DestDir=
FileVersion=1,0,0,0
[wbspkzt570.driver]
file-win32-x86=thiscab
RegisterServer=no
DestDir=10
[wbsrdzt600.driver]
file-win32-x86=thiscab
RegisterServer=no
DestDir=10
[wbsptpr2.driver]
file-win32-x86=thiscab
RegisterServer=no
DestDir=10
[MSCOMM32.ocx]
file-win32-x86=thiscab
RegisterServer=yes
clsid={C97F7659-002E-42C8-BD8F-5A54F4ED11CC}
DestDir=11
[RegisterFiles]
%11%\plugin.dll
%11%\MSCOMM32.ocx
iamafraid
2001-07-02
打赏
举报
回复
<OBJECT classid=clsid:xxxxxxxx-xxxx-xxx-xxxx-xxxxxxxx
codebase= "getcast.cab#version=1,0,0,0"></OBJECT>
另外:
请检查
客户机中
"C:\WINNT\Downloaded Program Files"
或"C:\WINDOWS\Downloaded Program Files"
下有没有你的 getcast.dll 和 getcast.ocx
另外,请详细说明 你用客户机访问页面时的情况。
包括 url
是否有安装的警告窗口。
以及你的空间是否签名。
以及 你的页面是如何写的。
pf_ma
2001-07-02
打赏
举报
回复
push
pf_ma
2001-07-02
打赏
举报
回复
我试了还是不行!!!我用的getcast.ocx,getcast.dll这两个文件是用VC++写的,手工注册的话只需REGSVR32 GETCAST.OCX就行了,getcast.ocx会调用getcast.dll文件,我需要的是WEB上的COSEBASE的那种,盼回复!!!
iamafraid
2001-07-02
打赏
举报
回复
[version]
; version signature (same for both NT and Win95) do not remove
signature="$CHICAGO$"
AdvancedINF=2.0
[Add.Code]
GETCAST.DLL=GETCAST.DLL
GETCAST.OCX=GETCAST.OCX
[GETCAST.DLL]
file-win32-x86=thiscab
FileVersion=1,0,0,0
[GETCAST.OCX]
file-win32-x86=thiscab
clsid={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx}
FileVersion=1,0,0,0
RegisterServer=yes
; end of INF file
;请添入你的控件的 ID
ca
b
文件
制作
inf
文件
示例
制作
ca
b需要做繁琐的
inf
文件
编写
工作,这个是模板,只要修改一下
文件
名即可打包
ca
b
ca
b 包的简要制作过程
ca
b 包的自作
ca
b 包的简要制作过程 包含了
inf
文件
的
编写
,生成证书
精通Windows.API-函数、接口、编程实例.pdf
15.2
编写
INF
文件
466 15.2.1
INF
文件
格式 466 15.2.2 Install节 468 15.2.3 CopyFiles和AddReg等安装过程 468 15.2.4 源路径和目的路径 469 15.2.5 字符串表 469 15.3 安装程序setup.exe的编号 469 ...
精通WindowsAPI 函数 接口 编程实例
15.2
编写
INF
文件
466 15.2.1
INF
文件
格式 466 15.2.2 Install节 468 15.2.3 CopyFiles和AddReg等安装过程 468 15.2.4 源路径和目的路径 469 15.2.5 字符串表 469 15.3 安装程序setup.exe的编号 469 ...
IIS6.0 IIS,互联网信息服务
in_这两个
CA
B格式的
文件
,将解压缩得到的“iis.dll”改名为“iis2.dll”,复制到“C:\Windows\system32\setup\”目录下;将 “iis.
inf
”改名为“iis2.
inf
”,复制到“C:\Windows\
inf
\”目录下。 步骤3 打开控制...
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章