在上一节的IE扩展开发中,我们说了一下BandObject和COM的封装,当然里面还有一些其他的类,这些都可以拿来直接使用,由于代码量很多,所以我只粘贴了一部分,而代码可以从这里下载。各位看官可以好好的研究一下如何开发一个简单的IE扩展了。
IE扩展并没有像Firefox那样可以用一个XPI进行安装,所以这里我们还是要使用msi进行安装。在制作安装包之前,我们要知道IE是怎么识别这个扩展的。其实IE识别扩展的方法很简单,就是在注册表里面新增加一个字段而已,注册表的地址在Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects里面,打开注册表的这个位置我们可以看到里面有很多的GUID,这些都是浏览器的一些扩展。前面我们定义了我们的Toolbar的GUID就是用在这里了,所以在安装的时候我们就要重写注册事件注册我们的注册表。
首先还是做一个安装包,我们只用添加Primary output就可以了,然后系统会问是否要添加ieframe.dll,先选择是,然后我们将这个dll的属性的exclude变为true,否则安装的过程中还需要注册这个dll。安装包做好了应该是如下图所示的。

然后这里我们就需要自定义用户的一些安装的行为并重写这些行为,我们在资源管理器上方,有一个customer action editor,我们选中它并添加和安装事件的关联。

选中之后我们就可以看到一些action,然后都添加primary output,增加关联,如下图所示。

添加完成后,我们的安装的action就应该如下图所示了。

在制作好安装包之后,我们就要重写相应的事件了。这里我们在我们的Toolbar项目中添加一个Installer项目,然后编写相应的代码,具体代码如下所示。
{
[RunInstaller(true)]
public partial class IEToolbarInstaller : Installer
{
public IEToolbarInstaller()
{
InitializeComponent();
}
//重写安装事件
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
//注册注册表
RegistrationServices reg = new RegistrationServices();
if (!reg.RegisterAssembly(this.GetType().
Assembly, AssemblyRegistrationFlags.SetCodeBase))
{
//如果注册不成功则抛出异常
throw new Exception("Install error :
Can not register your DLL to IE");
}
}
//重写卸载事件
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
RegistrationServices reg
= new RegistrationServices();//移除注册表内容
if (!reg.UnregisterAssembly(this.GetType().Assembly))
{
throw new InstallException("Uninstall error :
Failed to unregister the toolbar for COM");
}
}
}
}
这样我们在安装的过程中就对注册表进行了相应的操作,把相应的DLL注册到了IE认识的注册表里面,这样,当下一次IE启动的时候,就会运行我们的IE插件了。
看来一个IE插件真的很难写啊。。
[...] IE Extension with C# – 重写Install [...]