- 浏览: 55209 次
- 性别:
- 来自: 陕西
文章分类
最新评论
-
yangge3232:
你好,我的cab chktrust 能运行,就是放在服务器上无 ...
OCX制作CAB,数字签名制作(根据地)
解决方案:
这种自动下载功能,是Internet Explorer的5.X以上版本提供的一种基于Active X的方式。IE浏览器会通过网页里面的<object>标签所标示的软件名称以及版本,检测当前系统中是否装有该软件,若装了,则检测版本是否比它老,当当前系统中没有该软件或者版本不够新时,IE就会自动安装该软件,当然在安装软件之前,它会有一个安全认证的过程。
实现步骤:
1.选择文件
要安装的插件或者程序必然是有一个或者多个文件组成的,它可以是.exe可执行文件,也可以是.ocx、.dll等类型的文件。首先我们要安装的文件准备好,最好存放在同一目录内,以便下一步的制作。我在这里选定了个文件做演示,test.dll,准备安装到当前windows的系统目录。
2.制作.inf文件。
.inf文件也就是安装配置文件。它指定了软件包内需要安装的文件和这些需要安装的目标目录,需要创建的程序组以及需要改动的注册表内容。绝大部分的安装程序都包含这类文件。
普通的.inf文件一般分为几节。见表1
[Version] 用于确认.inf文件的基本版本信息
[DefaultInstall] 默认情况下,会执行的一节。包含指向其他节的指针,该节可用于指定要复制和删除的文件、注册表的更新、.inf文件的更新等。
[DestinationDirs] 指定硬盘上复制、删除或重命名节文件的位置(列如\windows或windows\system)。
[fileCopy/Delete/RenameSection(s)] 列出要复制、删除或重命名的文件。
[Strings] 列出上面所使用的可本地化字符串。
表1
需要重点说明的就是目标文件夹“DestinationDirs”一节,我们一般使用逻辑磁盘标示符(LDID),其中25表示system目录,其他见表2
00 Null LDID-可用于创建新的LDID
01 Source Drive:\pathname
10 Machine文件夹(在基于服务器的安装时,映射windows文件夹)
11 System文件夹
12 IOSubsys文件夹
13 Command文件夹
17 Inffolder
18 Help文件夹
20 Fonts
21 Viewers
22 VMM32
23 Color文件夹
24 包含windows文件夹的驱动器根目录
25 windows文件夹
26 windows的约定引导设备(Winboot)
28 Host Winboo
30 启动盘的根文件夹
31 虚拟启动盘的主驱动器根文件夹
表2
3.制作软件包
我们要将插件或者软件最终在网页上发布,还必须将它做成windows的.cab压缩软件包。制作该软件包的工具IExpress在高版本的 windows里面已经提供,如果windows版本不够高,可以在IE5安装程序中查找IEAK5.EXE或者IEAK5CD.EXE,执行该文件即可。
运行Iexpress程序,选择Create Compressed files only(Active Installs),这样制作出的即是.cab文件。接下来是软件包的命名,我们不妨命名为test.cab文件。然后再选取test.dll、 test.inf两个文件进行打包。
4.进行数字签名
虽然我们做好了软件包,但是如果不用电子证书对他进行数字签名的话,它是不能通过客户端的安全检查的(除非安全级别设成“低”)。可使用signcode.exe,下载地址download/signcode.exe。
5.在网页上发布软件包
我们的终极目的当然是要在网页上发布该软件或插件。需要使用的HTML元素是:<object></object>
先将我们的操作中涉及的它的属性介绍如下:
clsid:生成的类在windows中的编号,这里涉及部分windows注册表知识,本文不再赘述。
codebase:指定需要下载的软件地址及其版本。
比如我们可以在网页中写入:
<object classid="clsid:A27CDB6E-AE6D-11CF-96B8-444553540000" codebase="test.cab#Version=1,0,0,0" VIEWASTEXT>
</object>
这里要提示大家的是,如果你并不清楚自己的软件应该设置成什么版本的时候,可以写上Version=-1,-1,-1,-1,这样就可以达到如果客户端没有该软件就下载,倘若下载过就忽略的目的。
最后,我们要做的就是体验自己的成果了。
制作cab安装包是一件挺简单的事情,如果大家写的主题或者程序 涉及到注册表的修改,建议使用cab安装包来进行安装。
首先你需要如下几个文件 ,CabwizSP.exe ,cabwiz.ddf。
好了,下面进入正文,要制作.cab安装包,你只要写一个.inf文件,CabwizSP.exe会根据你的这个INF文件来生成_setup.xml ,那么文件要如何写呢?其实很简单,我会提供一个范本,大家只要修改[SourceDisksFiles]之后的字段即可。
下面我就来解释一下主要字段的含义。
第一个字段[Version]中Provider大家可以随便改,其他两个参数就不要去碰了。
第二个字段[CEStings]的AppName=""就是你为所要安装的程序所起的名字。完整的名字将会是Provider参数的字符 串加上AppName参数的字符串,例如范本,最后出现在删除程序中的名字就是“MGCN iMac”。
第三个字段[CEDevice.ARM720],CEDevice字段是程序所对应的设备平台 ,这个大家就不用去管它了,写smartphone的inf文件时候加上这个字段就行了。
下面的[SourceDisksNames]是指定源文件所在的磁盘和路径,这里我也搞不太清楚,sdk中的例子 也看不懂,我用绝对路径也不行,索性就直接用.代替,反正大家copy就是了(看补充1),这样,大家只要把要打包的文件要和inf放在一起就可以了。
下面一个字段[SourceDisksFiles]就是大家要打包的文件清单,后面的=1就表示文件的路径,也就是[SourceDisksNames]中的 1。再下一个字段[DefaultInstall]就是安装步骤,范本中CopyFiles参数和AddReg参数表示安装不仅仅是解压拷贝文件,还要修改注册表。CopyFiles=后面跟着是字段名字,即你所要做的拷贝工作到底有哪些。AddReg=作用一样。例如在范本中,CopyFiles=CopyToHomeDir,CopyToiMacDir就是告诉CabwizSP.exe要做两个拷贝文件工作,第一个是把一些文件拷贝到Home文件夹下,要拷贝的文件在[CopyToHomeDir]字段中,第二个是把一些文件拷贝到iMac文件夹下,要拷贝的文件在 [CopyToiMacDir]而AddReg=RegData表示安装程序还要修改注册表,修改的东西在[RegData]字段中。下一个字段就是目标文件夹的具体位置。两个参数CopyToHomeDir和CopyToiMacDir要和上个字段的CopyFiles等号右边的两个字符串值分别相同。这里0我也不清楚是什么意思,sdk中找不到,%CE19%就表示\Storage\Application Data(看最后注释)
再下一个字段[CopyToHomeDir]就是具体的任务分配了,引号里面表示解压后的文件名,必须和你压缩前的文件名相同,即必须在 [SourceDisksFiles]中能找到相应的文件,后面表示拷贝到相应目录后的文件名,如果没特殊要求就不要改名了。后面一个字段作用和这个相同,我就不多说了,最后是修改注册表段,第一个“,”之前表示注册表中的四大块的名字,直接用缩写就可以了,如范本中HKLM就代表 HKEY_LOCAL_MACHINE,其他三个分别为HKCR,HKCU和HKU。第二个“,”之前表示你要修改的键的具体路径(如果没有会自动 建立),即完整的项(key)名称,第三个“,”之前就表示你要具体修改的键(就是我们经常在修改注册表的文章中看到的Value Name),如果没有的话程序就会自动建立,第四个“,”之前表示值类型,目前我只懂得整数是0x00010001(见补充2),字符型数据 这里你就不要填了,留着个“,”就可以了。最后就是你要填入的Value。
例如在范例中HKLM,SOFTWARE\Microsoft\Shell\Rai\:CallAlert,BKBitmapFile,,"\Storage\Application Data\Home\iMac\call1.jpg" 表示修改(建立)名为BKBitmapFile的键的值,它在HKLM\SOFTWARE\Microsoft\Shell\Rai \:CallAlert下,值内容为\Storage\Application Data\Home\iMac\call1.jpg,很明显,这是一个值为String类型的键。整数的我就不说了,范本中有,我相信大家看得懂。
好了,inf文件写好了,copy你要打包的文件和inf文件到含有CabwizSP.exe,cabwiz.ddf的目录中,在命令行模式 下输入CabwizSP xx.inf,xx代表你为inf文件起的名字,那么一个带_setup.xml的.cab包就生成完毕了,安装一下,看看自己的成果吧。
注释:%A%表示引用A参数的值,如CopyToHomeDir = 1,%CE1%\%AppName%的话就代表\storage\program files\MGCN iMac。(在范例中AppName=Provider+AppName="MGCN"+"iMac"),而对于%CEX%,系统 在安装程序时候会自动翻译,如%CE19%翻译结果是\Application Data,又如CE1表示\program files,CE2表示\windows , 最后的翻译结果系统会在前面已翻译的结果上再加上默认的storage卷标名(前提是存在默认的storage卷标名),如Smartphone的默认磁盘卷标是Storage,那么%CE19%最终就变成了\Storage\Application Data。有兴趣的可以去翻翻SDK 看看到底有多少的%CEX%。
补充1:从modaco的那篇英文文章知道,[SourceDisksNames]包含有四个域,域与域之间用逗号隔开,第一个域是disk_id,磁盘的id(我什么都试过了,这个实在不懂啥意思...大家就表管它意义了。),第二个域是注释,要用""把注释内容包含起来,第三个不知道,第四个是文件路径,“.”就表示当前目录,“..”表示当前目录的上一级目录。
补充2:第四个","之前0x00010001称之为Flag,应该说是对后面value具体类型的表明。几个flag说明如下:
0x00000002 如果注册的键(值)存在,则不修改它,不存在的话值就等于最后一个域的内容了(废话...)这个flag可以和下面的任何flag混用(具体怎么混用我也不懂,如果你用这个Flag的话,后面所跟的内容就是string类型了,按理说可以指定后面内容的类型的,不过我试不出来,sdk中也找不到相关说明,估计要去msdn中去找才行...)
0x00000000 表明是String类型,对应注册表中的REG_SZ数据类型。
0x00010000 表明是Multi-String类型,对应REG_MULTI_SZ数据类型。就是说包含有很多个字符串,每个字符串用“,”隔开。 HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSClog,BKFlags,0x00010000,"xxx","yyy","zzz"
0x00000001 二进制类型,对应注册表中的REG_BINARY数据类型,你可以写好几个不同的的二进制,每个二进制数就代表一个域,域与域之间用","隔开,注意不能用0x打头(16进制的头标志)。格式如下:HKLM,SOFTWARE\Microsoft\Shell\Rai \:MSClog,BKFlags,0x00000001,00,01,11,10,11,10
0x00010001 表示是整数,对应注册表中的REG_DWORD数据类型。如果数字前面加0x表示十六进制数字,写入注册表时会自动翻译成十进制。如:HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSClog,BKFlags,0x00010001,0x26那么生成 _setup.xml时候0x26就变成了38,datatype还是integer。
补充3:[String]字段。这个字段是用来定义 你要重复使用的字符串的缩写的,比如你"Software\Microsoft\My Test App"这个字符串用得很多,你可以用r来代表,只要你在这个字段中写入r = "Software\Microsoft\My Test App" 那么再后面字段中你就可以用%r%来表示Software\Microsoft\My Test App了,例如在注册表字段中你可以这样写HKLM,%r%,test,0x00010001,3,就等同于 HKLM,Software\Microsoft\My Test App,test,0x00010001,3
补充4:关于建立快捷键。形式如下,主要是要在[DefaultInstall],[DestinationDirs]加入相应的项目,并且要建立一个字段,字段名字可以随便取,不过注意三个字段中这个名字都要一样。如:
[DefaultInstall]
CEShortcuts = Shortcuts
[DestinationDirs]
Shortcuts = 0,%CE14%
[Shortcuts]
Sample App,0,sample.exe
Sample App,0,sample.exe,%InstallDir%
这里主要是最后一个字段的语法要说明一下,四个域,域之间用逗号隔开,前三个域的内容必须填写。第一个域是快捷键名称,第二个域中0表示是文件,其他任何非零数表示为目录,第三个域就是快捷键的目标程序(目录),第四个域是可选域,是安放快捷键的目录,默认目录就是[DestinationDirs]中 Shortcuts = "",你可以指定其他目录,如你想在开始菜单 中加入自己的快捷键的话就在这里写上storage\windows\startmenu\。
最后需要说明的是文中的为了方便大家能看清楚,逗号都用全角表示,INF文件涉及系统的东西是不能使用全角符号的,字符串我还没有试过,不过我建议大家能使用英文尽量使用英文....
范本1,我自己写的主题iMac的inf文件
[Version]
Signature = "$Windows NT$"
Provider = "MGCN"
CESignature = "$Windows CE$"
[CEStrings]
AppName = "iMac"
[CEDevice.ARM720]
ProcessorType = 0
[SourceDisksNames]
1 =.
[SourceDisksFiles]
imac.home.xml = 1
alert.jpg = 1
app.jpg = 1
batterieoff.bmp = 1
batterieon.bmp = 1
BatteryMask.gif = 1
calendar.jpg = 1
call1.jpg = 1
call.jpg = 1
confirm.jpg = 1
contacts.jpg = 1
dial.jpg = 1
dialback.jpg = 1
error.jpg = 1
i1.gif = 1
i2.gif = 1
i3.gif = 1
i4.gif = 1
incall.jpg = 1
info.jpg = 1
kbat.ini = 1
kdh2.jpg = 1
newhome.jpg = 1
pro.jpg = 1
programs.jpg = 1
sm.jpg = 1
volume.jpg = 1
[DefaultInstall]
CopyFiles = CopyToHomeDir, CopyToiMacDir
AddReg = RegData
[DestinationDirs]
CopyToHomeDir = 0,%CE19%\Home
CopyToiMacDir = 0,%CE19%\Home\iMac
[CopyToHomeDir]
"iMac.home.xml",iMac.home.xml
[CopyToiMacDir]
"alert.jpg", alert.jpg
"app.jpg", app.jpg
"batterieoff.bmp", batterieoff.bmp
"batterieon.bmp", batterieon.bmp
"BatteryMask.gif", BatteryMask.gif
"calendar.jpg", calendar.jpg
"call1.jpg", call1.jpg
"call.jpg", call.jpg
"confirm.jpg", confirm.jpg
"contacts.jpg", contacts.jpg
"dial.jpg", dial.jpg
"dialback.jpg", dialback.jpg
"error.jpg", error.jpg
"i1.gif", i1.gif
"i2.gif", i2.gif
"i3.gif", i3.gif
"i4.gif", i4.gif
"incall.jpg", incall.jpg
"info.jpg", info.jpg
"kbat.ini", kbat.ini
"kdh2.jpg", kdh2.jpg
"newhome.jpg", newhome.jpg
"pro.jpg", pro.jpg
"programs.jpg", programs.jpg
"sm.jpg", sm.jpg
"volume.jpg", volume.jpg
[RegData]
HKLM,SOFTWARE\Microsoft\Shell\Rai\:CallAlert,BKBitmapFile,,"\Storage\Application Data\Home\iMac\call1.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:ErrorBox,BKBitmapFile,,"\Storage\Application Data\Home\iMac\error.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:ExclamationBox,BKBitmapFile,,"\Storage\Application Data\Home\iMac\alert.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:InformationBox,BKBitmapFile,,"\Storage\Application Data\Home\iMac\info.jpg"
HKLM,Software\Microsoft\Shell\Rai\: QuestionBox,BKBitmapFile,,"\Storage\Application Data\Home\iMac\confirm.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:VolDlg,BKBitmapFile,,"\Storage\Application Data\Home\iMac\volume.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSStart,BKBitmapFile,,"\Storage\Application Data\Home\iMac\programs.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSCPROG,BannerImage,,"\Storage\Application Data\Home\iMac\incall.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSCPROG,BKBitmapFile,,"\Storage\Application Data\Home\iMac\dialback.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSCdial,BannerImage,,"\Storage\Application Data\Home\iMac\dial.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSClog,BKBitmapFile,,"\Storage\Application Data\Home\iMac\programs.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSClog,BKFlags,0x00010001,26
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSCONTACTS,BKBitmapFile,,"\Storage\Application Data\Home\iMac\contacts.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSCONTACTS,BKFlags,0x00010001,26
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSSYNCAPP,BKBitmapFile,,"\Storage\Application Data\Home\iMacX\programs.jpg"
HKCU,ControlPanel\Home,Scheme,,"\Storage\Application Data\Home\iMac.home.xml"
HKCU,ControlPanel\Home,BgImage,,
HKCU,ControlPanel\Home,ColorScheme,,
范本2,e200插件的inf文件[Version]
Signature = "$Windows NT$"
Provider = "Orange"
CESignature = "$Windows CE$" [CEStrings]
AppName = "E200's plugin"
[CEDevice.ARM720]
ProcessorType = 0[SourceDisksNames]
1 =. [SourceDisksFiles]
4orangeh.dll = 1
[DefaultInstall]
CopyFiles = CopyToHomeDir
AddReg = RegData[DestinationDirs]
CopyToHomeDir = 1,%CE19%\Home[CopyToHomeDir]
"4orangeh.dll",4orangeh.dll
[RegData]
HKCR,CLSID\{A2536C54-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
HKCR,CLSID\{A2536C55-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
HKCR,CLSID\{A2536C56-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
HKCR,CLSID\{A2536C57-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
HKCR,CLSID\{A2536C58-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
HKCR,CLSID\{A2536C59-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
HKCR,CLSID\{A2536C5B-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
http://msdn.microsoft.com/en-us/library/aa924371.aspx
http://www.devdiv.net/viewthread.php?tid=1594&extra=page%3D1
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/okadler0518/archive/2009/06/02/4235835.aspx
这种自动下载功能,是Internet Explorer的5.X以上版本提供的一种基于Active X的方式。IE浏览器会通过网页里面的<object>标签所标示的软件名称以及版本,检测当前系统中是否装有该软件,若装了,则检测版本是否比它老,当当前系统中没有该软件或者版本不够新时,IE就会自动安装该软件,当然在安装软件之前,它会有一个安全认证的过程。
实现步骤:
1.选择文件
要安装的插件或者程序必然是有一个或者多个文件组成的,它可以是.exe可执行文件,也可以是.ocx、.dll等类型的文件。首先我们要安装的文件准备好,最好存放在同一目录内,以便下一步的制作。我在这里选定了个文件做演示,test.dll,准备安装到当前windows的系统目录。
2.制作.inf文件。
.inf文件也就是安装配置文件。它指定了软件包内需要安装的文件和这些需要安装的目标目录,需要创建的程序组以及需要改动的注册表内容。绝大部分的安装程序都包含这类文件。
普通的.inf文件一般分为几节。见表1
[Version] 用于确认.inf文件的基本版本信息
[DefaultInstall] 默认情况下,会执行的一节。包含指向其他节的指针,该节可用于指定要复制和删除的文件、注册表的更新、.inf文件的更新等。
[DestinationDirs] 指定硬盘上复制、删除或重命名节文件的位置(列如\windows或windows\system)。
[fileCopy/Delete/RenameSection(s)] 列出要复制、删除或重命名的文件。
[Strings] 列出上面所使用的可本地化字符串。
表1
需要重点说明的就是目标文件夹“DestinationDirs”一节,我们一般使用逻辑磁盘标示符(LDID),其中25表示system目录,其他见表2
00 Null LDID-可用于创建新的LDID
01 Source Drive:\pathname
10 Machine文件夹(在基于服务器的安装时,映射windows文件夹)
11 System文件夹
12 IOSubsys文件夹
13 Command文件夹
17 Inffolder
18 Help文件夹
20 Fonts
21 Viewers
22 VMM32
23 Color文件夹
24 包含windows文件夹的驱动器根目录
25 windows文件夹
26 windows的约定引导设备(Winboot)
28 Host Winboo
30 启动盘的根文件夹
31 虚拟启动盘的主驱动器根文件夹
表2
3.制作软件包
我们要将插件或者软件最终在网页上发布,还必须将它做成windows的.cab压缩软件包。制作该软件包的工具IExpress在高版本的 windows里面已经提供,如果windows版本不够高,可以在IE5安装程序中查找IEAK5.EXE或者IEAK5CD.EXE,执行该文件即可。
运行Iexpress程序,选择Create Compressed files only(Active Installs),这样制作出的即是.cab文件。接下来是软件包的命名,我们不妨命名为test.cab文件。然后再选取test.dll、 test.inf两个文件进行打包。
4.进行数字签名
虽然我们做好了软件包,但是如果不用电子证书对他进行数字签名的话,它是不能通过客户端的安全检查的(除非安全级别设成“低”)。可使用signcode.exe,下载地址download/signcode.exe。
5.在网页上发布软件包
我们的终极目的当然是要在网页上发布该软件或插件。需要使用的HTML元素是:<object></object>
先将我们的操作中涉及的它的属性介绍如下:
clsid:生成的类在windows中的编号,这里涉及部分windows注册表知识,本文不再赘述。
codebase:指定需要下载的软件地址及其版本。
比如我们可以在网页中写入:
<object classid="clsid:A27CDB6E-AE6D-11CF-96B8-444553540000" codebase="test.cab#Version=1,0,0,0" VIEWASTEXT>
</object>
这里要提示大家的是,如果你并不清楚自己的软件应该设置成什么版本的时候,可以写上Version=-1,-1,-1,-1,这样就可以达到如果客户端没有该软件就下载,倘若下载过就忽略的目的。
最后,我们要做的就是体验自己的成果了。
制作cab安装包是一件挺简单的事情,如果大家写的主题或者程序 涉及到注册表的修改,建议使用cab安装包来进行安装。
首先你需要如下几个文件 ,CabwizSP.exe ,cabwiz.ddf。
好了,下面进入正文,要制作.cab安装包,你只要写一个.inf文件,CabwizSP.exe会根据你的这个INF文件来生成_setup.xml ,那么文件要如何写呢?其实很简单,我会提供一个范本,大家只要修改[SourceDisksFiles]之后的字段即可。
下面我就来解释一下主要字段的含义。
第一个字段[Version]中Provider大家可以随便改,其他两个参数就不要去碰了。
第二个字段[CEStings]的AppName=""就是你为所要安装的程序所起的名字。完整的名字将会是Provider参数的字符 串加上AppName参数的字符串,例如范本,最后出现在删除程序中的名字就是“MGCN iMac”。
第三个字段[CEDevice.ARM720],CEDevice字段是程序所对应的设备平台 ,这个大家就不用去管它了,写smartphone的inf文件时候加上这个字段就行了。
下面的[SourceDisksNames]是指定源文件所在的磁盘和路径,这里我也搞不太清楚,sdk中的例子 也看不懂,我用绝对路径也不行,索性就直接用.代替,反正大家copy就是了(看补充1),这样,大家只要把要打包的文件要和inf放在一起就可以了。
下面一个字段[SourceDisksFiles]就是大家要打包的文件清单,后面的=1就表示文件的路径,也就是[SourceDisksNames]中的 1。再下一个字段[DefaultInstall]就是安装步骤,范本中CopyFiles参数和AddReg参数表示安装不仅仅是解压拷贝文件,还要修改注册表。CopyFiles=后面跟着是字段名字,即你所要做的拷贝工作到底有哪些。AddReg=作用一样。例如在范本中,CopyFiles=CopyToHomeDir,CopyToiMacDir就是告诉CabwizSP.exe要做两个拷贝文件工作,第一个是把一些文件拷贝到Home文件夹下,要拷贝的文件在[CopyToHomeDir]字段中,第二个是把一些文件拷贝到iMac文件夹下,要拷贝的文件在 [CopyToiMacDir]而AddReg=RegData表示安装程序还要修改注册表,修改的东西在[RegData]字段中。下一个字段就是目标文件夹的具体位置。两个参数CopyToHomeDir和CopyToiMacDir要和上个字段的CopyFiles等号右边的两个字符串值分别相同。这里0我也不清楚是什么意思,sdk中找不到,%CE19%就表示\Storage\Application Data(看最后注释)
再下一个字段[CopyToHomeDir]就是具体的任务分配了,引号里面表示解压后的文件名,必须和你压缩前的文件名相同,即必须在 [SourceDisksFiles]中能找到相应的文件,后面表示拷贝到相应目录后的文件名,如果没特殊要求就不要改名了。后面一个字段作用和这个相同,我就不多说了,最后是修改注册表段,第一个“,”之前表示注册表中的四大块的名字,直接用缩写就可以了,如范本中HKLM就代表 HKEY_LOCAL_MACHINE,其他三个分别为HKCR,HKCU和HKU。第二个“,”之前表示你要修改的键的具体路径(如果没有会自动 建立),即完整的项(key)名称,第三个“,”之前就表示你要具体修改的键(就是我们经常在修改注册表的文章中看到的Value Name),如果没有的话程序就会自动建立,第四个“,”之前表示值类型,目前我只懂得整数是0x00010001(见补充2),字符型数据 这里你就不要填了,留着个“,”就可以了。最后就是你要填入的Value。
例如在范例中HKLM,SOFTWARE\Microsoft\Shell\Rai\:CallAlert,BKBitmapFile,,"\Storage\Application Data\Home\iMac\call1.jpg" 表示修改(建立)名为BKBitmapFile的键的值,它在HKLM\SOFTWARE\Microsoft\Shell\Rai \:CallAlert下,值内容为\Storage\Application Data\Home\iMac\call1.jpg,很明显,这是一个值为String类型的键。整数的我就不说了,范本中有,我相信大家看得懂。
好了,inf文件写好了,copy你要打包的文件和inf文件到含有CabwizSP.exe,cabwiz.ddf的目录中,在命令行模式 下输入CabwizSP xx.inf,xx代表你为inf文件起的名字,那么一个带_setup.xml的.cab包就生成完毕了,安装一下,看看自己的成果吧。
注释:%A%表示引用A参数的值,如CopyToHomeDir = 1,%CE1%\%AppName%的话就代表\storage\program files\MGCN iMac。(在范例中AppName=Provider+AppName="MGCN"+"iMac"),而对于%CEX%,系统 在安装程序时候会自动翻译,如%CE19%翻译结果是\Application Data,又如CE1表示\program files,CE2表示\windows , 最后的翻译结果系统会在前面已翻译的结果上再加上默认的storage卷标名(前提是存在默认的storage卷标名),如Smartphone的默认磁盘卷标是Storage,那么%CE19%最终就变成了\Storage\Application Data。有兴趣的可以去翻翻SDK 看看到底有多少的%CEX%。
补充1:从modaco的那篇英文文章知道,[SourceDisksNames]包含有四个域,域与域之间用逗号隔开,第一个域是disk_id,磁盘的id(我什么都试过了,这个实在不懂啥意思...大家就表管它意义了。),第二个域是注释,要用""把注释内容包含起来,第三个不知道,第四个是文件路径,“.”就表示当前目录,“..”表示当前目录的上一级目录。
补充2:第四个","之前0x00010001称之为Flag,应该说是对后面value具体类型的表明。几个flag说明如下:
0x00000002 如果注册的键(值)存在,则不修改它,不存在的话值就等于最后一个域的内容了(废话...)这个flag可以和下面的任何flag混用(具体怎么混用我也不懂,如果你用这个Flag的话,后面所跟的内容就是string类型了,按理说可以指定后面内容的类型的,不过我试不出来,sdk中也找不到相关说明,估计要去msdn中去找才行...)
0x00000000 表明是String类型,对应注册表中的REG_SZ数据类型。
0x00010000 表明是Multi-String类型,对应REG_MULTI_SZ数据类型。就是说包含有很多个字符串,每个字符串用“,”隔开。 HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSClog,BKFlags,0x00010000,"xxx","yyy","zzz"
0x00000001 二进制类型,对应注册表中的REG_BINARY数据类型,你可以写好几个不同的的二进制,每个二进制数就代表一个域,域与域之间用","隔开,注意不能用0x打头(16进制的头标志)。格式如下:HKLM,SOFTWARE\Microsoft\Shell\Rai \:MSClog,BKFlags,0x00000001,00,01,11,10,11,10
0x00010001 表示是整数,对应注册表中的REG_DWORD数据类型。如果数字前面加0x表示十六进制数字,写入注册表时会自动翻译成十进制。如:HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSClog,BKFlags,0x00010001,0x26那么生成 _setup.xml时候0x26就变成了38,datatype还是integer。
补充3:[String]字段。这个字段是用来定义 你要重复使用的字符串的缩写的,比如你"Software\Microsoft\My Test App"这个字符串用得很多,你可以用r来代表,只要你在这个字段中写入r = "Software\Microsoft\My Test App" 那么再后面字段中你就可以用%r%来表示Software\Microsoft\My Test App了,例如在注册表字段中你可以这样写HKLM,%r%,test,0x00010001,3,就等同于 HKLM,Software\Microsoft\My Test App,test,0x00010001,3
补充4:关于建立快捷键。形式如下,主要是要在[DefaultInstall],[DestinationDirs]加入相应的项目,并且要建立一个字段,字段名字可以随便取,不过注意三个字段中这个名字都要一样。如:
[DefaultInstall]
CEShortcuts = Shortcuts
[DestinationDirs]
Shortcuts = 0,%CE14%
[Shortcuts]
Sample App,0,sample.exe
Sample App,0,sample.exe,%InstallDir%
这里主要是最后一个字段的语法要说明一下,四个域,域之间用逗号隔开,前三个域的内容必须填写。第一个域是快捷键名称,第二个域中0表示是文件,其他任何非零数表示为目录,第三个域就是快捷键的目标程序(目录),第四个域是可选域,是安放快捷键的目录,默认目录就是[DestinationDirs]中 Shortcuts = "",你可以指定其他目录,如你想在开始菜单 中加入自己的快捷键的话就在这里写上storage\windows\startmenu\。
最后需要说明的是文中的为了方便大家能看清楚,逗号都用全角表示,INF文件涉及系统的东西是不能使用全角符号的,字符串我还没有试过,不过我建议大家能使用英文尽量使用英文....
范本1,我自己写的主题iMac的inf文件
[Version]
Signature = "$Windows NT$"
Provider = "MGCN"
CESignature = "$Windows CE$"
[CEStrings]
AppName = "iMac"
[CEDevice.ARM720]
ProcessorType = 0
[SourceDisksNames]
1 =.
[SourceDisksFiles]
imac.home.xml = 1
alert.jpg = 1
app.jpg = 1
batterieoff.bmp = 1
batterieon.bmp = 1
BatteryMask.gif = 1
calendar.jpg = 1
call1.jpg = 1
call.jpg = 1
confirm.jpg = 1
contacts.jpg = 1
dial.jpg = 1
dialback.jpg = 1
error.jpg = 1
i1.gif = 1
i2.gif = 1
i3.gif = 1
i4.gif = 1
incall.jpg = 1
info.jpg = 1
kbat.ini = 1
kdh2.jpg = 1
newhome.jpg = 1
pro.jpg = 1
programs.jpg = 1
sm.jpg = 1
volume.jpg = 1
[DefaultInstall]
CopyFiles = CopyToHomeDir, CopyToiMacDir
AddReg = RegData
[DestinationDirs]
CopyToHomeDir = 0,%CE19%\Home
CopyToiMacDir = 0,%CE19%\Home\iMac
[CopyToHomeDir]
"iMac.home.xml",iMac.home.xml
[CopyToiMacDir]
"alert.jpg", alert.jpg
"app.jpg", app.jpg
"batterieoff.bmp", batterieoff.bmp
"batterieon.bmp", batterieon.bmp
"BatteryMask.gif", BatteryMask.gif
"calendar.jpg", calendar.jpg
"call1.jpg", call1.jpg
"call.jpg", call.jpg
"confirm.jpg", confirm.jpg
"contacts.jpg", contacts.jpg
"dial.jpg", dial.jpg
"dialback.jpg", dialback.jpg
"error.jpg", error.jpg
"i1.gif", i1.gif
"i2.gif", i2.gif
"i3.gif", i3.gif
"i4.gif", i4.gif
"incall.jpg", incall.jpg
"info.jpg", info.jpg
"kbat.ini", kbat.ini
"kdh2.jpg", kdh2.jpg
"newhome.jpg", newhome.jpg
"pro.jpg", pro.jpg
"programs.jpg", programs.jpg
"sm.jpg", sm.jpg
"volume.jpg", volume.jpg
[RegData]
HKLM,SOFTWARE\Microsoft\Shell\Rai\:CallAlert,BKBitmapFile,,"\Storage\Application Data\Home\iMac\call1.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:ErrorBox,BKBitmapFile,,"\Storage\Application Data\Home\iMac\error.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:ExclamationBox,BKBitmapFile,,"\Storage\Application Data\Home\iMac\alert.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:InformationBox,BKBitmapFile,,"\Storage\Application Data\Home\iMac\info.jpg"
HKLM,Software\Microsoft\Shell\Rai\: QuestionBox,BKBitmapFile,,"\Storage\Application Data\Home\iMac\confirm.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:VolDlg,BKBitmapFile,,"\Storage\Application Data\Home\iMac\volume.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSStart,BKBitmapFile,,"\Storage\Application Data\Home\iMac\programs.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSCPROG,BannerImage,,"\Storage\Application Data\Home\iMac\incall.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSCPROG,BKBitmapFile,,"\Storage\Application Data\Home\iMac\dialback.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSCdial,BannerImage,,"\Storage\Application Data\Home\iMac\dial.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSClog,BKBitmapFile,,"\Storage\Application Data\Home\iMac\programs.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSClog,BKFlags,0x00010001,26
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSCONTACTS,BKBitmapFile,,"\Storage\Application Data\Home\iMac\contacts.jpg"
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSCONTACTS,BKFlags,0x00010001,26
HKLM,SOFTWARE\Microsoft\Shell\Rai\:MSSYNCAPP,BKBitmapFile,,"\Storage\Application Data\Home\iMacX\programs.jpg"
HKCU,ControlPanel\Home,Scheme,,"\Storage\Application Data\Home\iMac.home.xml"
HKCU,ControlPanel\Home,BgImage,,
HKCU,ControlPanel\Home,ColorScheme,,
范本2,e200插件的inf文件[Version]
Signature = "$Windows NT$"
Provider = "Orange"
CESignature = "$Windows CE$" [CEStrings]
AppName = "E200's plugin"
[CEDevice.ARM720]
ProcessorType = 0[SourceDisksNames]
1 =. [SourceDisksFiles]
4orangeh.dll = 1
[DefaultInstall]
CopyFiles = CopyToHomeDir
AddReg = RegData[DestinationDirs]
CopyToHomeDir = 1,%CE19%\Home[CopyToHomeDir]
"4orangeh.dll",4orangeh.dll
[RegData]
HKCR,CLSID\{A2536C54-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
HKCR,CLSID\{A2536C55-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
HKCR,CLSID\{A2536C56-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
HKCR,CLSID\{A2536C57-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
HKCR,CLSID\{A2536C58-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
HKCR,CLSID\{A2536C59-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
HKCR,CLSID\{A2536C5B-6AC2-4C31-9542-B144B0E9D077}\InprocServer32,,,"\Storage\Application Data\Home\4orangeh.dll"
http://msdn.microsoft.com/en-us/library/aa924371.aspx
http://www.devdiv.net/viewthread.php?tid=1594&extra=page%3D1
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/okadler0518/archive/2009/06/02/4235835.aspx
发表评论
-
看电脑眼睛不酸不胀的好方法
2011-04-21 13:21 965像我们这样整天对着电脑,也应该注意一下。所以我就来向大家介绍一 ... -
Request获取url信息的各种方法比较
2011-03-08 23:27 14999从Request对象中可以获取各种路径信息,以下例子: ... -
需要学习的
2011-03-02 16:20 904Junit设计模式分析20089101614163.doc ... -
findbugs:插件可以提供发现bug的功能。
2010-12-28 20:33 1154findbugs:插件可以提供发现bug的功能。 jupi ... -
浅析ActiveX控件的CAB压缩(zhuan)
2010-11-15 22:21 15671. 引言 ActiveX控件技术是从OLE基础上发展起来的, ... -
CAB打包,网页中嵌入ActiveX控件
2010-11-15 22:19 1905这几天在研究网页中嵌入ActiveX控件的用法 首先自己使用 ... -
Web发布cab文件打包的ActiveX控件总结
2010-11-15 22:18 1991一、程序描述: 程序环境:windows Xp sp2, ie ... -
发布ActiveX控件(把ocx做成cab发布) --activex数字签名
2010-11-15 22:16 2061最近我正在研究ActiveX技术。我使用Delphi 7创建了 ... -
OCX制作CAB,数字签名制作
2010-11-15 22:12 1713从网上找了些相关的资料,最终制作成功,做个小的总结: 首先准 ... -
数字签名(ms)
2010-11-15 22:06 937步骤: (1) 产生名为chinani的证书与私钥文件, ... -
如何给ocx,dll控件进行数字签名
2010-11-15 22:02 1353下面用到的命令可以从 Microsoft Visual Stu ... -
通过WEB页面自动发布客户端软件
2010-11-15 22:02 1120作为软件产品发布的途 ... -
OCX制作CAB,数字签名制作(根据地)
2010-11-15 21:53 2199从网上找了些相关的资料,最终制作成功,做个小的总结: 首先准 ... -
给自己开发的ocx空间数字签名的方法(青岛金鑫-java技术攻略)
2010-11-15 21:49 2753给自己开发的ocx空间数字签名的方法2008年11月11日 星 ...
相关推荐
### 制作CAB包的方法详解 #### 一、引言 CAB文件是一种压缩文件格式,主要用于存储多个文件,并且被广泛应用于Windows系统中。本文档将详细介绍如何制作CAB包,包括所需工具的获取与使用方法,以及编写INF文件的...
**VB制作CAB包详述** CAB( Cabinet)文件是一种常见的Windows系统中用于存储和分发软件组件的压缩格式,特别适用于通过网页部署ActiveX控件。在VB(Visual Basic)开发环境中,我们可以利用其内置的功能来创建CAB...
【标题】:“如何制作cab包”这一主题涉及到的是在Windows操作系统环境下创建 Cabinet(.cab)文件的过程。CAB文件是一种常见的软件打包格式,用于存储和分发程序或更新,它支持数据压缩,可以包含多个文件,并能...
本篇文章将深入探讨如何制作CAB包以及如何对其进行签名,确保其安全性和可靠性。 首先,理解CAB文件的制作过程至关重要。CAB打包工具,如MakeCab.exe,是Microsoft提供的一种命令行工具,用于创建CAB文件。制作CAB...
CAB打包制作软件允许用户将各种文件,如WINPE(Windows Preinstallation Environment)镜像文件,打包成CAB文件,以便于传输、存储或部署。以下是对CAB打包制作软件及其相关知识点的详细解释: 1. CAB文件结构: ...
总的来说,"CAB制作工具包"是为了方便开发者将多个文件打包成一个安全可靠的 CAB 文件,以便在 Windows CE 系统中顺利安装和运行。这个过程中涉及到文件的压缩、签名和部署,是移动设备软件开发中的重要环节。通过...
在制作CAB文件时,你需要以下关键知识点: 1. **CAB文件结构**:CAB文件由一系列的块组成,每个块包含一个或多个文件。这些文件被压缩,并且可以包含数字签名以验证文件的完整性和来源。 2. **CAB制作软件**:描述...
在本文中,我们将深入探讨如何使用Visual Studio ...通过以上步骤,你可以成功地开发一个C#编写的ActiveX控件,制作CAB包,并在网页中使用。在开发过程中,要注意控件的安全性、兼容性和易用性,以确保最佳用户体验。
首先,我们需要了解制作CAB包的基本工具。在这个案例中,提供了三个关键的工具:`cabarc.exe`、`iexpress.exe`和`signcode.exe`。 1. `cabarc.exe` 是微软提供的命令行工具,用于创建和处理CAB文件。通过指定不同的...
用c#.net开发的ActiveX控件后打包成cab包
提供了该打包工具,位于CAB目录下,共包含makecab.exe、cab.ddf、installer.inf和makecab.bat四个文件,其中cab.ddf和installer.inf文件需要简单说明下。 cab.ddf文件定义了CAB文件的打包行为,内容包括打包参数,...
### DsoFramer.ocx 制作 CAB 包详细图解过程 #### 一、概述 在本篇文章中,我们将详细介绍如何使用 `DsoFramer.ocx` 制作 CAB 包的过程。CAB 文件是一种压缩文件格式,常用于 Windows 操作系统中,特别是对于 ...
了解如何制作CAB包是软件发布和系统维护过程中的一个重要环节。 首先,我们要知道CAB包的核心制作工具是`makecab.exe`,这是一个命令行工具,用于创建CAB文件。使用`makecab.exe`,你可以指定输入文件、压缩算法、...
使用Windows CE制作CAB包的工具,如`HandByTmcCab`,可以帮助开发者打包他们的应用程序及其依赖,形成一个可以轻松部署到目标设备上的单一文件。 在提供的文件列表中,我们看到`tmcinput.sln`,这是一个Visual ...
5. **使用工具制作CAB**:Windows SDK提供了一个名为MAKECAB的工具,它可以用来根据INF文件创建CAB包。你提供的文件名"makeCAB"很可能就是这个工具。输入正确的参数和INF文件路径,MAKECAB会生成包含OCX文件和INF...
3. 如果 `execute.bat` 不符合你的需求,你可以根据 `使用方法.txt` 中的指示,自定义 `CABARC` 命令来创建包含OCX文件的CAB包。 4. 创建CAB文件时,你可能还需要为OCX控件提供一个INF文件,这个文件包含了安装控件...
是软件开发人员制作升级包和办公人员的文件打包的好帮手 适用领域: 1.软件开发 2.办公 特点: 1.项目模式:作为软打包工具,可将需要打包的文件存为项目, 为下次打包同样内容的资料节省时间 2.支持拖放:可将需要...
主要内容包括使用SetupFactory制作程序安装包的过程以及利用makeCAB工具制作cab包并进行网络发布的具体步骤。 ### 一、使用SetupFactory制作程序安装包 #### 1. 添加文件与文件夹 - **启动SetupFactory**:首先...