2009-10-12 4 views
2

Я написал набор приложений для Windows, который, помимо прочего, устанавливает надстройку Firefox, которая после запуска изменяет сетевые предпочтения Firefox, взаимодействуя с nsIPrefService.Правильный способ восстановления настроек Firefox, когда надстройка удалена внешним приложением

Само расширение находится в папке под Файлы программы вместе с другими частями приложения, которые работают вместе друг с другом.

Поскольку приложение состоит из нескольких компонентов, правильный способ его удаления через панель управления или с помощью ярлыка для удаления, который я предоставляю пользователям.

У меня нет контроля над тем, будет ли Firefox работать или нет, когда пользователь захочет удалить (возможно, я попытаюсь определить, работает ли он в деинсталляторе и попросит пользователя закрыть его, чтобы продолжить).

С целью деинсталлятора, чтобы удалить все следы программы из системы конечных пользователей, а именно:

  • все файлы под Program Files папку, включая компоненты расширения
  • удалите надстройку из Firefox (удалив раздел реестра под HKEY_CURRENT_USER \ Software \ Mozilla \ Firefox \ Extensions, в результате чего надстройка будет отменена при следующем перезапуске 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 закрытия)

Для меня это не элегантное решение:

  • Это кажется не будущим доказательством, поскольку оно зависит от формата и символов, используемых prefs.js, которые могут измениться в будущих выпусках FF.
  • У Firefox есть неприятная привычка не всегда закрываться должным образом (иногда других установленных надстройками не позволяет полностью выгрузить из памяти, это сломает мой деинсталлятор).
  • Это не сработает (без детальной модификации), если у пользователя будет несколько профилей FF, все с помощью моего дополнения.

Есть ли лучший или «стандартный» способ достичь этой простой задачи?

ответ

0

Вы пытались упаковать defaults files (defaults/preferences/myprefs.js) в расширение? Я не проверял, работает ли он для переопределения значений по умолчанию для Firefox, но это должно быть.

0

Не может ли деинсталлятор «настаивать» на том, чтобы Firefox был закрыт? например,

check if FireFox is open 
    if open, inform user "FF must be closed, or cancel uninstall" ok/cancel 
    loop 

У меня было несколько инсталляторов, которые делают это со мной. Но я не помню, что это не unistallers.

Кроме того, это не гарантирует будущее решение и не касается профилей.