C# and IE ActiveX Control

步骤如下:

1、新建项目;

namespace IEActiveXControl {
    [Guid("{4576985E-AEC1-46c4-B5E6-DFEFA8CBC9EF")] // Use GUIDGEN.exe
    interface IIEActiveXControl { // Interface define
        bool Installed(); // Install state,True = Installed,False = Not Installed
        bool WasRunning(); // ClientApp Running state,True = Running,False = Not Running
        void Logout(string strUserId,string strPassword,bool bRemoveRegKey); 
        void UnInstall();// UnInstall ClientApp
    }

    [Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IObjectSafety {
        //methods   
        [PreserveSig]
        void GetInterfacceSafyOptions(System.Int32 riid,out System.Int32 pdwSupportedOptions,out System.Int32 pdwEnabledOptions);
        [PreserveSig]
        void SetInterfaceSafetyOptions(System.Int32 riid,System.Int32 dwOptionsSetMask,System.Int32 dwEnabledOptions);
    }
[ClassInterface(ClassInterfaceType.AutoDual)]
[Guid("794037BB-168F-42db-BB18-AC11B98798E4")] // Keep same with step 11
public class YourClassName:IIEActiveXControl {
}

 2、根据实际的业务需要在YourClassName中实现步骤1 中自定义的接口;

 3、修改AssemblyInfo.cs中ComVisible为[assembly: ComVisible(true)];

 4、新建一个IEActiveXControlInstaller安装项目,并添加项目输出的主输出;

 5、然后在安装项目中点击项目主输出,在属性设置窗口中将Register改为vcdrpCOM;

 6、然后生成该IEActiveXControlInstaller.msi;

 7、新建一个IEActiveXControlInstaller.inf文件,内容如下:

[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[Setup Hooks]
hook1=hook1

[hook1]
run=msiexec.exe /i "%EXTRACT_DIR%\IEActiveXControlInstaller.msi" /qn

  8、使用微软提供的CABARC.exe打成cab包,生成IEActiveXControlInstaller.cab文件;

CABARC.EXE N IEActiveXControlInstaller.cab IEActiveXControlInstaller.msi IEActiveXControlInstaller.inf

  9、然后创建测试证书;

makecert -sk IEActiveXControl - n "CN=Javaeye,dc=com" c:\IEActiveXControl\IEActiveXControl.cer

10、然后使用signtool signwizard启动签名向导,按照提示一步步完成对IEActiveXControl.cab的签名;

11、开始测试;

<object name="IEActiveXControl" id="IEActiveXControl"  classid="CLSID:794037BB-168F-42db-BB18-AC11B98798E4" codebase="${contextPath}/IEActiveXControl.cab#version=1,0,0,0"></object>

 clssid注意和第一步YourClassName前的guid保持一致;

12、OK;

13、在IE6、7、8下通过了测试;

14、因为目前的业务某些原因无法上传源码;

 

当然,可能有朋友会说这是基于.net framework的,可能会要求客户机装有.net framework,对客户现场的部署来说是不可接受的。

不过个人觉得这几乎可以不用考虑,现在连5元碟片都已经自带了.net framework了,所以安装系统时可以不用在意这个问题了,当然就更不用说微软的Vista以及Windows 7了,虽然目前市面上对Vista的评价不咋地,但不可否认那毕竟会代表一个主流趋势。

 

你可能感兴趣的:(C++,c,.net,IE,C#)