zoukankan      html  css  js  c++  java
  • C#制做Activber控件

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

     
    2009年9月25日 | 分类: ASP.NET | 标签: activex, cab (24,545views)
     

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

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

    一、编写ActiveX控件 1、新建一个【Windows窗体控件库项目】  C#开发ActiveX控件及制作CAB包

    2、添加一个【用户控件】  C#开发ActiveX控件及制作CAB包

    3、拖两个Label控件到界面上  C#开发ActiveX控件及制作CAB包

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

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

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

    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互操作注册】  C#开发ActiveX控件及制作CAB包

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

    二、制作ActiveX Setup安装文件 1、新建一个安装项目  C#开发ActiveX控件及制作CAB包

    2、在项目上点右键,【添加】->【项目输出】,选择上边的项目  C#开发ActiveX控件及制作CAB包

    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控件等,如果提示了也不能安装,需要将网站添加到信任站点,并允许下载不安全和未签名控件。关于控件的签名和认证,本文不做说明,需要的请自行搜索。  C#开发ActiveX控件及制作CAB包

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

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

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

    http://download.microsoft.com/download/platformsdk/cab/2.0/w98nt42kmexp/en-us/cabsdk.exe

    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文件。  C#开发ActiveX控件及制作CAB包

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

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

    这里还添加了一个按钮,点击时触发一个事件,调用控件的显示时间方法,点击按钮,你会发现控件上时间的变化。  C#开发ActiveX控件及制作CAB包

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

  • 相关阅读:
    iSCSI又称为IPSAN
    文档类型定义DTD
    HDU 2971 Tower
    HDU 1588 Gauss Fibonacci
    URAL 1005 Stone Pile
    URAL 1003 Parity
    URAL 1002 Phone Numbers
    URAL 1007 Code Words
    HDU 3306 Another kind of Fibonacci
    FZU 1683 纪念SlingShot
  • 原文地址:https://www.cnblogs.com/zhangxin1989/p/2631178.html
Copyright © 2011-2022 走看看