.Net魔法堂:史上最全的ActiveX开发教程——发布篇
一、 前言
接着上一篇《.Net魔法堂:史上最全的ActiveX开发教程——开发篇》,本篇讲述如何发布我们的ActiveX。
二、废话少讲,马上看步骤!
1. 打包
C#开发的Activex不像`OCX`那样直接通过`regsvr32.exe`注册,而采用两种方式发布使其运行在浏览器上。 1. 离线安装:将控件类库打包成MSI安装包,然后在客户端安装。 1.1. 添加安装项目
1.2. 右键“添加”->“项目输出”,选择ActiveX控件为“主输出”
1.3. 双击“解决方案资源管理器”的“检测到的依赖项”下的 Microsoft.NET Framework 并修改“启动条件”下 .NET Framework 的Version为.NET Framework2.0
1.4. 修改“主输出来自XXX”的 Register 属性为 vsdrpCOM
2. 在线安装:将MSI再封装成CAB包,并将CAB包随应用一同发布,当浏览器访问含该ActiveX控件时就会自动提示安装。 2.1. 定义cab.ddf
.OPTION EXPLICIT
.Set Cabinet=on
.Set Compress=on
.Set MaxDiskSize=CDROM
.Set ReservePerCabinetSize=6144
.Set DiskDirectoryTemplate="."
.Set CompressionType=MSZIP
.Set CompressionLevel=7
.Set CompressionMemory=21
.Set CabinetNameTemplate="自定义CAB文件名.CAB"
"installer.inf"
"打包的msi文件名称.msi"
2.2. 定义installer.inf
[Setup Hooks]
hook1=hook1
[hook1]
run=msiexec /i %EXTRACT_DIR%打包的msi文件名称.msi /qn
[Version]
Signature= "$CHICAGO$"
AdvancedInf=2.0
2.3. 定义makecab.bat
makecab.exe /f "cab.ddf"
2.4. 执行makecab.bat就会生成CAB包
2. 签名
1. 制作cer证书 使用makecert.exe工具生成cer证书(工具在`C:Program FilesMicrosoft SDKsWindowsv7.0Abin`)
cmd命令
makecert -r -n "CN=发行者名称" -b 01/01/2012 -e 01/01/2018 -sv 证书文件名称.pvk 证书文件名称.cer
注意:执行命令后将弹出私钥密码对话框,可以设置或不设置私密。
2. (可选项)将cer证书转换为spc证书 使用cert2spc.exe工具(工具在`C:Program FilesMicrosoft SDKsWindowsv7.0Abin`)
cmd命令
cert2spc cer证书文件名.cer spc证书文件名.spc
3. 将cer证书转换为pfx证书 使用pvk2pfx.exe工具将cer证书转换为pfx证书(PKCS#12证书及私钥)(工具在`C:Program FilesMicrosoft SDKsWindowsv7.0Abin`) cmd命令格式:
pvk2pfx /pvk pvk证书文件名.pvk [/pi pvk证书密码] /spc cer或spc证书文件名.cer或spc [/pfx pfx证书名称.pfx] [/po pfx证书的私密] [/f]
说明: 若第一步中,没有设置私钥,那么就`/pi pvk证书密码`就不用填写; 若`/po pfx证书的私密`没有填写,那么pfx证书就使用与pvk证书一样的私钥; 如果存在于-pfx指定的名称相同名称的文件,则需要使用`/f`来覆盖已有的.pfx文件。
示例,cmd:
pvk2pfx /pvk fsgmcc.pvk /pi gmcc123 /spc fsgmcc.cer /pfx fsgmcc.pfx /f
4. 通过signtool导入证书到cab的ActiveX文件 signtool是vs2010的AuthentiCode签名工具(使用 PKCS#7标准定义的数据结构生成待签名文件的数字签名,并加入到待签名文件的PE结构中即可)。
cmd命令
signtool sign -f pfx证书文件名.pfx [-p pfx密码] ActiveX控件文件.CAB
示例:
signtool sign -f fsgmcc.pfx DirBrowser.CAB
三、总结
这时ActiveX的发布工作已经完成,接下来请期待《.Net魔法堂:史上最全的ActiveX开发教程——部署篇》吧!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PAT (Basic Level) Practice (中文)1020 月饼 (25 分)
- 201709-2ccf计算机职业资格认证考试第二题公共钥匙盒
- SAP Spartacus里cx-carousel的实现
- 技术分享 | 改写 mysqldump 解决 DEFINER 问题
- CNS图表复现04—单细胞聚类分群的resolution参数问题
- 学习Vue3.0,先从搭建环境开始
- AIM Tech Round 5 (rated, Div. 1 + Div. 2)C. Rectangles
- PAT (Basic Level) Practice (中文)1006 换个格式输出整数 (15 分)
- 编译原理实战入门:用 JavaScript 写一个简单的四则运算编译器(二)语法分析
- PAT (Basic Level) Practice (中文)1023 组个最小数 (20 分)
- Angular里使用createEmbeddedView动态加入新的模板元素
- PAT (Basic Level) Practice (中文)1002 写出这个数 (20 分)
- [笔记整理]几个有点重要的知识点
- PAT (Basic Level) Practice (中文)1005 继续(3n+1)猜想 (25 分)
- PAT (Basic Level) Practice (中文)1033 旧键盘打字 (20 分)