如何发布ActiveX 控件
[必备条件]
一、用于将ActiveX控件进行打包并加数据鉴名的工具集:
makecert.exe 作cer格式的证书,即X.509证书,同时可以创建私钥和公钥。
cert2spc.exe 将cer格式证书转换成spc格式证书,即PKCS #7证书。
cabarc.exe 将ocx打包成cab。
signcode.exe 将证书签署到ocx上去。
chktrust.exe 检查签署证书后的ocx是否正确。
certmgr.exe 是管理证书用的。
二、用于进行打包用的ocx控件evS1300.ocx。
三、用于查看ocx控件的工具ActvxDoc。
[制作过程]
一、环境设置
1、下载makeCAB包,解压到本地目录(如E盘根目录),如查看到如图1所示的工具集,则表示已下载成功:
2、设置系统环境变量,右键单击“我的电脑”à选择“属性”à选择“高级”选项卡,打开系统属性面版块
3、在系统属性版块里单击“环境变量(N)”按钮
4、选择“系统变量(S)”里的“新建(W)”按钮,打开“编辑系统变量”对话框,然后在“变量值(V)”里加入“;E/makeCAB”:
二、将用于打包的OCX控件放在E盘根目录下(本文档使用名为evS1300.ocx的控件来进行介绍),其中evS1300.ocx是本文档进行操作的控件对象,而mfc71.dll、msvcp71.dll、msvcr71.dll这三个文件通常是进行打包时一并打包的文件,但不是必须(推荐一起打包),其可在系统中的system32目录下找
到,请自行准备。
三、ActiveX发布步骤
1、单击“开始”à“动行(R)”à输入“cmd”à回车à进入到操作的控件所在的目录,如图6所示:
2、创建PVK文件(私人密匙文件),在命令行中输入“makecert -sk evS1300 evS1300.pvk -n CN=XXXXXXX公司”,然后回车
3、创建CER文件(公司证书),在命令行中输入“makecert -sk evS1300.pvk evS1300.cer”,然后回车若出现“Successed”提示,则会在E:/evS1300目录下生成evS1300.cer文件
4、创建SPC测试软件出版商证明书,在命令行中输入“cert2spc evS1300.cer evS1300.spc”,然后回车
5、创建INF文件,用记录本编辑以下信息
[version]
signature="$CHINA$"
AdvancedINF=1.0
[Add.Code]
evS1300.ocx=evS1300.ocx
msvcr71.dll=msvcr71.dll
mfc71.dll=mfc71.dll
msvcp71.dll=msvcp71.dll
[evS1300.ocx]
file=thiscab
clsid={0440906E-9BD6-4F3E-B65A-39E1B339D9DA}
FileVersion=1,0,0,0
RegisterServer=yes
[msvcr71.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=7,10,3052,4
[mfc71.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=7,10,3077,0
[msvcp71.dll]
file-win32-x86=thiscab
RegisterServer=no
DestDir=11
FileVersion=7,10,3077,0
在evS1300.inf的内容里,[version]和[Add.Code]项是必须的,[Add.Code]的键值项的多少取决于以下你所配制项的多少。[msvcr71.dll]、[mfc71.dll]、[msvcp71.dll]就是上面我所说不是必须的项,只要你想把msvcr71.dll、mfc71.dll、msvcp71.dll包括在发布包里,那这么三项就必须写在inf里,而这三项的具体内容是固定的,可复制过去即可。最为关键的就是[evS1300.ocx]项,其中有clsid和FileVersion就是evS1300.ocx的classId和version,这要求必须一至,否我们发布出去的CAB包时不能在客户端自动更新下载安装。说到这里,那我们如何才能知道evS1300.ocx里面的classId和version呢?我在上面的必备条件里介绍到有一个用于查看ocx控件的工具ActvxDoc,对,就是用它,我们双击这个文件运行它,此时可以看到图13所示的界面:
点击“File”à“Open…”,打开您所要查看的OCX控件
打开了控件之后,我们在界面的右边部位“Class”的下拉框里选择“”就可以看到我们想要查找的FileVersion和classId,如图15所示:
6、创建CAB文件,在命令行中输入“cabarc -s 6144 n evS1300.cab msvcr71.dll mfc71.dll msvcp71.dll evS1300.ocx evS1300.inf”,然后回车,
7、使用Code Signing Wizard签署一个CAB文件,首先双击运行工具集里面的signcode.exe(或在命令行里直接输入“signcode”后回车),系统会弹出如图17所示的数字签名向导:
8、单击“下一步(N)”按钮,选择要进行数字签名的且已做成CAB包的文件evS1300.cab文件。
9、选择好CAB包后单击“下一步(N)”按钮,在选择想要的签名类型里选择“自定议(C)”并单击“下一步(N)”按钮
10、接下来单击“从文件选择(F)”按钮,选择刚刚制作的evS1300.cer
11、在图20中单击“下一步(N)”按钮来到图21,然后在图21里选择“CSP中的私钥(K)”。
12、在图21中单击“下一步(N)”按钮,然后在图22中的散列算法中选择“shal”,并单击“下一步(N)”按钮。
13、在“证书路径中的证书”中选择“证书路径中的所有证书,包括根证书(C)”,在“其它证书(可选)”中选择“包括在以下PKCS #7 证书(.p7b)文件中的证书(P):”,并单击“浏览(R)…”按钮选择evS1300.spc文件,选择完后单击“下一步(N)”按钮
14、接下来在弹出的“数据描述”窗口中输入公司的名称和网址并单击“下一步(N
15、现大部份工作都已完成,在接下来的一步当中是可选的操作,其作用只是为CAB加入时间戳,此步骤完全可以不做
16、完成,单击“下一步(N)”按钮便可来到数字签名向导的最后一步,即操作总览,单击“完成”按钮便可大功告成
.net WinForm用户控件开发:用户控件的基本属性设置
在前几节中 我们演示了怎样进行用户控件开发 大家可能对用户控件中的一些属性的基本设置还存在疑惑 这节我们共同学习下用户控件的基本属性设置 所谓基本属性设置 就是我们常常看到控件在属性设计器中可以对属性进行设置 有些属性在设计中具有默认值 有些在属性设计器中会弹出一个编辑器 供用户选择值 这节内容 简单数据类型的属性设置 复杂数据类型的属性设置 简单数据类型的属性设置 简单数据类型 就是 NET中常见的类型 例如字符串 整型 浮动型 这些基本数据类型 我们看下这些基本属性 Browsable 指示该属性是否可以在属性设计器中显示 如果TRUE则显示 FALSE则不显示 Category 表示属性的分类 Description 表示属性的描述信息 DefaultValue 表示属性的默认值 下面我们定义了一个用户控件 并自定义了一个属性SecondText 代码如下 public partial class UCLabel : UserControl { public UCLabel() { InitializeComponent(); } private string _sText= Helloworld ;//初始值 /// /// Browsable表示该属性是否显示在设计器中 TRUE为显示 /// /// Description表示对属性的描述信息 /// Category表示该属性在属性设计器中的分类 [Browsable(true)] [Category( 文本 )] [Description( 第二文本 )] [DefaultValue( 新浪微博 )]//默认值 public string SecondText { get { return _sText; } set { _sText = value; } } } 从上面的图片中 我们可以看到各个属性在属性设计器中对应的项 在这里有一点要说明 我们把SecondText的初始值设为HelloWorld 把它的默认值设为新浪微博 我们说下初始值和默认值的区别 初始值是属性定义时候赋的值 当把用户控件拖到窗体上后 默认情况下显示的初始值 一个属性的默认值是非加粗显示 其他值都是加粗显示的 如果想恢复某个属性的默认值 只需要右键单击该属性 选择重置 就可以恢复属性的默认值 复杂属性的基本设置 复杂类型主要是指引用类型 例如我们自定义的类 或者系统原有的类 复杂属性的设置主要是默认值的设置 复杂属性的默认值设置不能再使用DefaultValue属性 需要使用Reset方法 如果想判断当前属性是否使用的是默认值 可以使用ShouldSerialize属性名来判断 当然 这两个方法都需要我们自己来实现 如下代码定义了一个颜色复杂属性 //定义属性的初始值为红色 private Color _sColor = Color Red; [Category( 颜色 )] [Description( 第二颜色 )] public Color SecondColor { get { return _sColor; } set { _sColor = value; } } /// /// 用于判断当前属性是否在使用默认值 /// /// public bool ShouldSerializeSecondColor() { return _sColor != Color Blue; } /// /// 用于设置属性的默认值为蓝色 /// public void ResetSecondColor() { _sColor = Color Blue; } 这样我们在属性设计器中就可以通过重置命令 设置默认颜色为蓝色 lishixinzhi/Article/program/net/201311/13456

