C#开发ActiveX控件及制作CAB包

一个项目要用到ActiveX控件,参照网上众多的例子,ActiveX控件倒是很容易就搞出来了;
然后做了一个【安装项目】,倒是可以使用,只不过需要在客户端手动点击安装,下一步,下一步…觉得不是很爽;
又试了试【CAB项目】,好像没人用VS2008来做,费了点功夫,终于找到解决办法。
特将此经验与大家分享。

开发工具:Visual Studio 2008
.NET版本:2.0
开发语言:C#

一、编写ActiveX控件
1、新建一个【Windows窗体控件库项目】

2、添加一个【用户控件】

3、拖两个Label控件到界面上

4、为控件添加一个方法,用来设置在Label中显示当前时间

//设置当前时间
public void SetTime(string timeStr)
  {
      this.label2.Text = timeStr;
  }

5、新建一个接口:
据说实现该接口的目的就是提高程序的安全性,以便客户端IE在不更改设置的情况下可以预行该ActiveX控件。
关于这个有篇文章,推荐大家看看:

点击打开链接

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
  
namespace HelloBossma
{
    [ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IObjectSafety
    {
        [PreserveSig]
        int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions);
  
        [PreserveSig()]
        int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions);
    }
}

6、让我们的控件实现这个接口
关于实现这个接口,篇幅较长,可以在这篇文章找到:

http://www.pinvoke.net/default.aspx/Interfaces/IObjectSafety.html

7、为我们的控件添加Guid、ProgId和ComVisible属性

namespace HelloBossma
{
    [Guid("636B8CE1-7512-464C-B63C-FC75BDCA21DB"), ProgId("HelloBossma.HelloBossmaActiveX"), ComVisible(true)]
    public partial class HelloBossmaActiveX : UserControl, IObjectSafety
    {
...
    }
}

8、打开项目属性,在生成里边,勾选【为Com互操作注册】

9、生成项目,进入到bin\Release目录下可以看到
HelloBossma.dll
HelloBossma.tlb
这两个文件时必须的,否则生成不成功。

二、制作ActiveX Setup安装文件
1、新建一个安装项目

2、在项目上点右键,【添加】->【项目输出】,选择上边的项目

3、打开安装项目的属性页面,设置安装URL
这里设置为:http://localhost/hellobossma
这个目录必须是实际存在的,用来存放生成的安装文件,供客户端下载安装。

4、生成项目
会生成两个文件,一个exe文件和一个msi文件

5、新建一个网站,添加如下代码到网页中。
其中classid即为控件的Guid。

<object classid="clsid:636B8CE1-7512-464C-B63C-FC75BDCA21DB" codebase="hellobossma/setup.exe" width="442" height="49" id="helloBossma"></object>
解压这个文件,里边有详细的使用说明。
6、将安装项目生成的exe和msi文件拷贝到网站hellobossma目录中。
HelloBossmaSetup.msi
setup.exe

7、启动网站,确保访问setup.exe的目录与【安装项目】中的【安装URL】一致。

8、一般情况下,网页会弹出提示,是否安装ActiveX控件等,如果提示了也不能安装,需要将网站添加到信任站点,并允许下载不安全和未签名控件。关于控件的签名和认证,本文不做说明,需要的请自行搜索。

使用这种安装方法,会在客户端弹出安装软件的界面,对客户来说,不太友好。

三、制作ActiveX CAB安装包
尝试了VS中的【CAB项目】模板,但是不幸的是,控件怎么也安装不上,放弃。
在网上看到很多人使用CABARC.EXE,试了一下,居然成功了,特将过程记录下来。

1、下载这个程序包,可以从微软下载,地址:


下载

2、【开始】-【运行】,输入“CMD”,在打开的命令提示符界面中,进入解压后文件的BIN目录,

这里需要加入两个文件:
HelloBossmaSetup.msi
install.inf

HelloBossmaSetup.msi 是上边的安装项目生成的安装程序。
install.inf是一个文本文件,指定运行控件所需要下载或者呈交的文件。

关于inf文件的书写规范,这里不做介绍,有需要的可以自己搜一下。
这个例子中install.inf文件的内容

[version]

signature="$CHICAGO$"
AdvancedINF=2.0
  
[Setup Hooks]
hook1=hook1
  
[hook1]
run=msiexec.exe /i "%EXTRACT_DIR%\HelloBossmaSetup.msi" /qn

有了这两个文件,运行下边的命令,成功的话会在当前目录生成HelloBossma.cab文件。

3、把这个文件放到控件下载目录中,然后修改网页中的调用方式。

<object classid="clsid:636B8CE1-7512-464C-B63C-FC75BDCA21DB" codebase="hellobossma/HelloBossma.CAB" width="442" height="49" id="helloBossma">
</object><input οnclick="helloBossma.SetTime((new Date()).getTime())" type="button" value="Click" />

这里还添加了一个按钮,点击时触发一个事件,调用控件的显示时间方法,点击按钮,你会发现控件上时间的变化。

OK,这篇文章到这里正文就结束了。
只是简单了解下使用C#开发ActiveX控件,很多东西还没弄清楚,有问题的话,欢迎提出来。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 可调节类控件 1.1 Datetimepicker控件 1.1.1 CalendarFont属性 1.1.2 CalendarForeColor属性 1.1.3 CalendarMonthBackground属性 1.1.4 CalendarTitleBackColor属性 1.1.5 CalendarTitleForeColor属性 1.1.6 CalendarTrailingForeColor属性 1.1.7 CustomFormat属性 1.1.8 Location属性 1.1.9 Region属性 1.1.10 ShowUpDown属性 1.1.11 ShowCheckBox属性 1.1.12 Size属性 1.1.13 Value属性 1.1.14另外2种显示时间和日期的方法 1.2 MonthCalendar控件 1.2.1属性说明 1.2.2应用举例 1.3 NumericUpDown控件 1.3.1 Anchor属性 1.3.2 AutoSize属性 1.3.3 CausesValidation属性 1.3.4 其他常用属性 第2章 选择类控件 2.1 RadioButton控件 2.1.1 AllowDrop属性 2.1.2 Anchor属性 2.1.3 AutoEllipsis属性 2.1.4 设置控件背景的属性 2.1.5 FlatStyle和FlatAppearance属性 2.1.6 Image类属性 2.1.7 UseWaitCursor属性 2.1.8 UseVisualStyleBackColor属性 2.1.9 ContextMenuStrip属性 2.1.10 TextlmageRelation属性 2.2 CheckBox控件 2.3 CheckedListBox控件 2.3.1 CausesValidation属性 2.3.2 CheckOnClick属性 2.3.3 ColumnWidth属性 2.3.4 Cursor属性 2.3.5 Dock属性 2.3.6 FormatStrin9和FormattingEnabled属性 2.3.7 HorizontalScroUBar和HorizontalExtent属性 2.3.8 ImeMode属性 2.3.9 IntegralHeight属性 2.3.10 Items属性 2.3.11 MaximumSize和MinimumSize属性 2.3.12 MultiColumn属性 2.3.13 RightToLefl属性 2.3.14 ScrollAlwaysVisible属性 2.3.15 SelectionMode属性 2.3.16 Sorted属性 2.3.17 ThreeDCheckBoxes属性 2.3.18 UseCustomTabOffsets属性 第3章 显示类控件 3.1 TextBox控件 3.1.1 AcceptsRetum属性 3.1.2 AcceptsTab属性 3.1.3 AutoCompleteCustomSource属性 3.1.4 AutoCompleteMode属性 3.1.5 AutoCompleteSource属性 3.1.6 CharacterCasin9属性 3.1.7 HideSelection属性 3.1.8 Lines和Multiline属性 3.1.9 MaxLength属性 3.1.10 PasswordChar属性 3.1.11 ScrollBars属性 3.1.12 UseSystemPasswordChar属性 3.1.13 WordWrap属性 3.2 RichTextBox控件 3.2.1 Lines属性 3.2.2 ScrollBars属性 3.2.3 AutoWordSelection属性 3.2.4 Bulletlndent属性 3.2.5 SelectionFont属性 3.2.6 DetectUrls属性 3.2.7 EnableAutoDragDrop属性 3.2.8 ShortCutsEnabled属性 3.2.9 ShowSelectionMargin属性 3.2.10 ZoomFactor属性 3.3 LinkLabel控件 …… 第4章 组合类控件 第5章 容器类控件 第6章 菜单和工具栏类控件 第7章 数据控件 第8章 .NET环境下组合类控件 第9章 打印类控件 第10章 对话框类控件 第11章 水晶报表控件 第12章 多媒体播放控件 第13章 自定义控件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值