步骤如下:
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的评价不咋地,但不可否认那毕竟会代表一个主流趋势。