将ActiveX打包成CAB发布的注意事项
1、在实现ActiveX组件时,注意VS必须使用管理员身份运行,否则会提示不成功
2、在解决方案中添加一个安装项目
a、在View中点击文件系统,添加对ActiveX项目的输出
b、注册表HKEY_CLASSES_ROOT/CLSID/{这儿是ActiveX组件类上的GUID元属性}/InstalledVersion
c、在InstalledVersion节上添加字符串值,并删除Name中的数据(之后会显示为(Default)),然后设置其值为ActiveX项目中设置的版本号,版本号的数字之间以逗号分隔,而不是小数点
d、然后生成安装项目
安装项目生成后,可以尝试安装测试
3、使用Cabarc工具打包成CAB,处置方式网上很多
Install.inf
[version] signature="$CHICAGO$" AdvancedINF=2.0 [Setup Hooks] hook1=hook1 [hook1] run=msiexec.exe /i "%EXTRACT_DIR%\安装程序.msi" /qn
安装程序生成时会生成两个文件,一个setup.exe,一个是项目名称.msi
生成CAB文件时,只需要.msi文件即可
4、为了能比较方便的安装测试,需要对CAB文件进行数字签名
a、使用makecert生成PVK,CER两个文件, 一个私钥,一个证书
makecert -n "CN=Company Name, E=Email, C=Country, S=Province, L=City" -r -sv 密钥.pvk 证书.cer
网上有些对于 -n参数中城市(县城)字段名为P,测试一下有问题,不能生成
b、使用cert2spc生成spc文件(软件发布者证书(Software Pulisher Cerificate))
cert2spc 证书.cer 发布者证书.spc
c、使用pvk2pfx生成PFX格式的证书(用于签名时使用)
pvk2pfx -pvk 密钥.pvk -spc 发布者证书.spc -pfx PFX证书.pfx
d、使用signtool(签名工具)对前面生成的cab文件进行签名
signtool sign /f PFX证书.pfx /p 密码 /v CAB文件.cab
我用的是signtool GUI界面的可视化程序
5、对CAB进行签名后,就可以放到网站上了,如 /lib/demo.cab
并在HTML页面中嵌入object标签
<object classid="clsid:9f725b9c-950c-4a50-95c6-2ad004d598de" codebase="lib/demo.cab#version=1,1,0,1" id="test" style="display:none;"></object>
其中classid为ActiveX组件的GUID元属性值,codebase的“#”前段为路径,后面为版本号(项目的版本号),并在安装项目中的注册表项一至
6、调用ActiveX方法
<input id="textValue" type="text" /> <input id="Button1" type="button" value="传值" onclick="GetMacAddress()" />
function GetMacAddress() { document.getElementById("textValue").value = document.getElementById("test").GetMacAddress(); }
7、到这一步,还差了那么一点
此时的cab文件会因为安全性的问题被浏览器拦截(前面的证书,是自签名性质的),虽然CAB已经进行过签名,但此时会提示未知的程序安装未知的应用
所以,我们要在客户端安装前面生成的cer证书(安装到受信任的根证书颁发机构下),再打开页面,就会提示下载Company Name的ActiveX组件(组件名),然后会静默安装(Win7以及以上版本,需要浏览器使用管理员身份打开页面)
过一会儿后,你就可以在控制面板下的卸载程序中可以看到你的程序了
然后重启电脑(安装后,直接打开页面,是不能正常使用的),再打开页面就可以看到效果了
另见:创建ActiveX
附件: