我估计有些朋友不清楚ActiveX控件,但这篇博客不是来解释这些概念的。如果你对ActiveX的概念不清楚,请参考这里: http://baike.baidu.com/view/28141.htm

这篇博客也不是讨论ActiveX是否有必要用的,因为这历来也是有些争议的。anyway, 我们这里只是探讨一下如何在.NET中也编写ActiveX控件,我用一个实例记录一下该过程

1. 创建一个类库项目,设置 Comvisible为true,设置AllowPartiallyTrustedCallers

为class也添加一个guid,注意这个要与assembly的那个不一样

设置该项目的一个属性: 为COM互操作注册

编译该项目,此时会自动在本机注册

2. 新建一个网页来使用该控件

在浏览器中打开该网页,此时会出现一个警告。正如你经常会看到的那样

点击右键,然后“允许阻止的内容”

点击页面上的“调用ActiveX”按钮,会出现下面的提示

点击“是”之后,就会调用我们写好的方法,显示出来“Hello,world”的文本

看起来不错对吧?你可能会问,怎么要这么麻烦来弹出一个Hello,World呢?这当然是一个演示。ActiveX控件典型的使用场合做一些复杂的客户端操作,例如文件批量上传等等。

我下面稍微修改一下控件

重新编译该项目之后,修改网页文件

在浏览器中再次打开该网页,点击按钮之后,会弹出选择文件的对话框

选择文件之后,单击“打开”

从这里可以看出来,ActiveX控件是在本地运行的,所以他可以做的事情很多。也正因为如此,它就势必也就存在安全方面的隐患。

3. 如何让浏览器信任我们的控件

上面的页面工作得很好,但是我们也看到了两次警告。这是不错的设计,因为要保护客户端的安全嘛。但如果在公司内部开发了一套ActiveX控件,每次都需要用户这样去用的话,显然也是不合适的。

那么,如何让IE识别我们的控件是安全的呢?

首先定义一个IObjecdSafety接口。这其实是一个COM接口,关于该接口,可以参考资料:http://msdn.microsoft.com/en-us/library/aa768224(VS.85).aspx

[ComImport, Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{

[PreserveSig]
    void GetInterfacceSafyOptions(
        int riid,
        out int pdwSupportedOptions,
        out int pdwEnabledOptions);

[PreserveSig]
    void SetInterfaceSafetyOptions(
        int riid,
        int dwOptionsSetMask,
        int dwEnabledOptions);

}

并且让我们的类型实现该接口

[Guid("6D2ECAC4-2D6B-4420-B19E-4CEFFA6AF280")]
public class MyActiveXControl:IObjectSafety
{
    public string HelloWorld() {
        return "Hello,world";
    }

public string SelectFileToUpLoad(string fileType) {
        OpenFileDialog dialog = new OpenFileDialog();
        dialog.Filter = fileType;

if (dialog.ShowDialog() == DialogResult.OK) {
            return dialog.FileName;
        }

return "你没有选择文件";
    }

#region IObjectSafety 成员

public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
    {
        pdwEnabledOptions = 2;
        pdwSupportedOptions = 1;
    }

public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
    {
        throw new NotImplementedException();
    }

#endregion
}

再次运行页面,会发现下面这个提示没有了

但是,下面这个警告还是有的

出现这样的警告其实关系不大,提醒一下用户也是有好处的。

如果一定不想看到,那么可以尝试修改安全设置【但不建议这么做】

4. 如何在客户端安装呢?

首先制作一个安装包程序

接下来我们需要为这个安装程序签名。如果要真的有效,则需要向一下证书机构申请真正的证书,当然是要交上$若干。我们这里用一个测试用的证书

先制作一个证书

安装该证书,双击文件

点击“安装证书”

然后利用这个证书给setup.exe签名

 
“从文件选择”

最后修改一下页面

最后,请打开下面的地址进行测试 ,首先也会有一个警告提示说该ActiveX已经被阻止了。

我测试的结果是即便加入到信任站点也不行。我想原因估计是我们的证书是一个测试用的。

所以,可行的方式可能是将安装包单独提供下载(需要提供那个msi安装包给用户安装即可)

只要安装好了之后,以后访问该网页就不会提示了

原文:http://www.cnblogs.com/chenxizhang/archive/2009/11/27/1612233.html

.NET : 开发ActiveX控件(转载)的更多相关文章

  1. C#开发Activex控件(转载别人的只为再看时方便放在自己里边了)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能, 以增强浏览器端的动态处理能力.通常ActiveX控件都 ...

  2. 使用C#开发ActiveX控件

    使用C#开发ActiveX控件(新) 前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动 ...

  3. 使用C#开发ActiveX控件[Obsolete]

    文章出处:http://www.cnblogs.com/yilin/archive/2009/09/15/1567332.html 附件下载(源代码+安装文件+教程) 0. 前言 ActiveX控件以 ...

  4. 用C#开发ActiveX控件,并使用web调用

    入职差不多两个月了,由学生慢慢向职场人做转变,也慢慢的积累知识,不断的更新自己.最近的一个项目里边,涉及到的一些问题,因为SDK提供的只是winform才能使用了,但是有需求咱们必须得完成啊,所以涉及 ...

  5. ATL开发 ActiveX控件的 inf文件模板

    ATL开发 ActiveX控件的 inf文件模板    

  6. 使用C#开发ActiveX控件(新)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  7. [转]C#开发ActiveX控件,.NET开发OCX控件案例

    引自:百度   http://hi.baidu.com/yanzuoguang/blog/item/fe11974edf52873aaec3ab42.html 讲下什么是ActiveX控件,到底有什么 ...

  8. 使用C#开发ActiveX控件(新) 转 http://www.cnblogs.com/yilin/p/csharp-activex.html

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  9. [转] 使用C#开发ActiveX控件

    双魂人生 原文 使用C#开发ActiveX控件 ActiveX 是一个开放的集成平台,为开发人员.用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内 ...

随机推荐

  1. ArcSde服务启动后又停止

    问题:突然发现ArcSde服务无法启动,“ArcSde服务启动后又停止,......” 环境:Win7+ArcSDE10 +Oracle11g 由于本人使用ArcSde时间不长,基本没有遇到过什么问题 ...

  2. 如何在Windows 7/8/10中使用热键来调整音量?

    有时,您需要一个热键来调整Windows PC中的音量.例如:播放全屏视频或游戏时需要调整音量. 有一个简单的方法可以做到: 安装并运行Perfect Hotkey软件.   配置键盘快捷键以进行音量 ...

  3. 可用的rtmp卫视直播地址

    http://blog.csdn.net/chinabinlang/article/details/45092297[ 可用的rtmp卫视直播地址] http://blog.csdn.net/chin ...

  4. bzoj2000 [Hnoi2010]stone 取石头游戏

    Description A 公司正在举办一个智力双人游戏比赛----取石子游戏,游戏的获胜者将会获得 A 公司提供的丰厚奖金,因此吸引了来自全国各地的许多聪明的选手前来参加比赛. 与经典的取石子游戏相 ...

  5. Mac iTerm2使用总结

    1.快捷键大全新建标签:command + t关闭标签:command + w切换标签:command + 数字 command + 左右方向键切换全屏:command + enter查找:comma ...

  6. redis安装和简介(1)

    一.Redis 简介 Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: R ...

  7. Semi-Supervised Dimensionality Reduction

    今天阅读了一篇关于半监督降维的论文,做个总结.这篇论文的全名叫<Semi-Supervised Dimensionality Reduction>(2006),是南大周志华老师的大作. 本 ...

  8. Jmeter--随机生成浮点数

    post接口中需要随机生成目标对象的地理位置: 所以就使用了javaScript函数,如下所示: { "Location": { "Altitude": ${_ ...

  9. C#的常用类

    BitConverter类:用于将源类型转换成字节数组,或者将字节数组转换成目标类型.在解决不同设备之间产生的大小端问题时,经常使用. Convert类:用于基本数据类型(包括Boolean/Byte ...

  10. Oracle创建表、修改表、删除表、约束条件语法

    一. 使用create关键字创建表 --(1)创建新表use 数据库(在那个数据库中建表)create table 表名(字段名1(列名) 数据类型 列的特征,字段名2(列名) 数据类型 列的特征(N ...