这是 FireBreath 用户经常提出的一个问题,所以我可能是时候在一个比项目 google 小组更容易找到的论坛上做出更详细的回答了。
首先,为了清除 regsvr32 的问题,FireBreath 确实支持所有浏览器的“自注册”;这意味着当您调用 regsvr32 时,它不仅会为 IE 安装注册表项,而且还会使用 DReJ 链接到的方法为 NPAPI 浏览器安装注册表项(该信息 +1,顺便说一句,谢谢。很多人不知道在哪里可以找到它)。
但是,安装程序界和 Microsoft 强烈反对自行注册 DLL。这有很多原因。您已经很好地总结了帖子中的其他安装选项;您可以在 IE 上使用 .cab 并在 firefox 上使用 .XPI,但当然这些在其他浏览器上对您没有帮助。
FireBreath 团队(由我领导)推荐的方法是为所有浏览器使用 MSI 安装程序。就个人而言,我不喜欢在不同的浏览器上安装不同的东西,所以我使用 javascript 来检测插件的存在(或不存在),然后提示用户下载并运行 MSI 安装程序。
FireBreath 为使用 WiX 构建 MSI 安装程序提供了“内置”支持。如果您在计算机上安装 WiX 3.0 或更高版本并重新运行准备脚本,它将创建一个 _WiXInstaller 项目,该项目将构建一个基本 MSI,以便在 Visual Studio 构建过程中为所有浏览器安装您的插件。您可以修改将留在主目录中的 .wxs 模板以对其进行自定义。
更多信息可以在 FireBreath wiki 上找到:
http ://www.firebreath.org/display/documentation/WiX+Installer+Help
http://www.firebreath.org/display/~me@iaincollins.com/Potential+安装程序+改进
如果您真的喜欢使用 .cab 安装程序用于 IE(我遇到过问题,但有些人似乎对他们很幸运),您可以将 MSI 文件分发到您的 CAB 中,并在 CAB 运行时运行它安装。这样做的好处是,当您安装 MSI 时,它会为 IE、Firefox、Safari、Chrome 和 Opera(以及与这些浏览器使用的相同插件技术兼容的其他浏览器)安装所有内容。
快速说明一下,MSI 是安装插件的理想解决方案(而不是使用诸如 regsvr32 之类的调用 DllRegisterServer 的东西)的原因是 MSI 是基于事务的,因此当您卸载它时,它总是会反转放入的内容;这意味着您不必担心支持卸载 10 个不同的旧安装程序版本,这些安装程序会将东西放在不同的地方等,因为 MSI 系统会在您升级时负责干净地卸载所有内容。
希望有帮助!