这是一种最常见的部署ActiveX控件的方式。在MSDN –> Vsiual Studio文档 –> Visual C++文档 –> 参考信息 –> 库参考信息 –> MFC –> Concepts –> MFC Internet Programming Task –> Creating Signed CAB Files For MFC –> Creating a CAB File 中有详细描述。
简单的来说就是下载CabSDK,里面有cabarc等工具,然后创建INF文件,然后用cabarc创建cab文件。最后对cab签名。
1、CabSDK可以在MSDN下载。
2、INF文件的参数和结构 在MSDN –> Web开发 –> Internet Explorer Development –> Content Extenstions –> Content and Component Delivery –> Internet Component Download –> Overviews/Tutorials –> About INF File Architecture 和 Using INF Files中有很详细的描述。
麻烦的是,INF中的目标位置只能是%windir%或者是%windir%/system。不可能是其他的目录,而且加入其它的操作也是一件相对比较复杂的事情。
好在有一个Setup Hooks的机制可以插入执行命令。可以执行任何命令,包括bat,这样就可以把所有的安装操作都写成bat。美中不足的是,安装的时候会有黑色的DOS窗口弹出来,怎么尝试都不能隐藏掉。所以我干脆写了一个Windows小程序,这个小程序是不显示自己的视窗的,同时根据传入的参数,在后台打开一个进程执行bat文件。配置如下:
[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[Setup Hooks]
hook1=hook1
[hook1]
run=%EXTRACT_DIR%/shell.exe %EXTRACT_DIR%/setup.bat %EXTRACT_DIR%
%EXTRACT_DIR%是Cab临时解压目录,shell.exe是我写的隐藏窗体的后台进程启动外壳。setup.bat是安装控件的脚本,为了让脚本能够得到解压的目录,把%EXTRACT_DIR%作为参数传递进去。脚本里面就可以做各种通用操作了。调试的时候可以用这种命令
run=%EXTRACT_DIR%/shell.exe %EXTRACT_DIR%/setup.bat %EXTRACT_DIR% > c:/debug.txt
3、接下来就是使用cabarc命令创建cab文件和签名。我喜欢使用批处理命令,因为cab里面文件较多,写在批处理命令里面很不方便。所以我一般都把需要打包的文件写入filelist,然后把打包命令写成批处理文件。比如
打包批处理 build.bat
set PATH=E:/mssdk/mscabsdk/BIN;%PATH%
cabarc N Release/MSF.cab @cabfilelist.txt
signcode -v view.pvk -spc view.spc Release/sel.CAB
cabfilelist.txt里面就直接列出需要打包的文件即可,一行一个文件。包括依赖的库文件,inf文件,安装脚本和执行外壳shell.exe。这是我其中一个项目的文件:
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.CRT/msvcm90.dll
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.CRT/msvcp90.dll
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.CRT/msvcr90.dll
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFC/Microsoft.VC90.MFC.manifest
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFC/mfc90.dll
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFC/mfc90u.dll
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFC/mfcm90.dll
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFC/mfcm90u.dll
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFCLOC/Microsoft.VC90.MFCLOC.manifest
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFCLOC/MFC90CHS.dll
E:/MicrosoftVisualStudio9/VC/redist/x86/Microsoft.VC90.MFCLOC/MFC90ENU.dll
sel.inf
setup.bat
../release/sel.ocx
../release/shell.exe
没有经过数字证书签名的控件是会被安全拦截的。所以签名十分必要。打包脚本的最后一步就是签名。view.pvk和view.spc就是我自己生成的证书。如何生成证书和安装证书请看我另外一篇文章。