Я написал набор приложений для 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, все с помощью моего дополнения.
Есть ли лучший или «стандартный» способ достичь этой простой задачи?