我在Windows上编写了一个应用程序套件,其中包括安装一个Firefox插件,该插件一旦运行就会通过与nsIPrefService接口来修改Firefox网络首选项。
扩展程序本身位于 Program Files 下的文件夹中,以及相互协同工作的其他部分。
由于应用程序包含许多组件,因此卸载它的正确方法是通过控制面板或我为用户提供的卸载快捷方式。
当用户选择卸载时,我无法控制Firefox是否会运行(可能我可以尝试检测它是否在卸载程序中运行并请求用户关闭它以继续)。
由于卸载程序的目的是从最终用户系统中删除程序的所有痕迹,即:
然后在卸载后,用户系统上没有任何代码能够将网络首选项恢复到安装组件之前的状态。这导致最终用户无法浏览网页并且非常沮丧!
我现在能够弄清楚如何做到这一点的唯一方法是让我的组件在窗口的注册表中写入用户配置文件文件夹的位置 - 我可以使用我的附加组件:
Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties).get("ProfD",
Components.interfaces.nsIFile).path
然后让我的卸载程序直接修改该位置的prefs.js文件。 但这只有在我可以保证Firefox在卸载期间没有运行时才会起作用(因为prefs.js会在FF关闭时重写)
对我而言,这不是一个优雅的解决方案:
有没有更好或“标准”的方法来实现这个简单的任务?
答案 0 :(得分:0)
您是否尝试在您的扩展程序中打包defaults files(defaults/preferences/myprefs.js
)?我没有检查它是否适用于覆盖Firefox范围的默认值,但它应该。
答案 1 :(得分:0)
卸载程序“坚持”Firefox不能关闭吗?例如,
check if FireFox is open
if open, inform user "FF must be closed, or cancel uninstall" ok/cancel
loop
我有几个安装人员对我这样做。但是,我并不记得,我不记得。
此外,这不是解决方案的未来问题,也不涉及配置文件。