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

  附件:

    CAB打包工具

    自签名证书工具

05-11 18:30