私は、Windows でアプリケーション スイートを作成しました。このアプリケーション スイートは、とりわけ Firefox アドオンをインストールします。このアドオンは、実行されると、nsIPrefService とのインターフェイスによって Firefox ネットワーク設定を変更します。
拡張機能自体は、互いに連携して動作するアプリケーションの他の部分と共に、Program Filesの下のフォルダーにあります。
アプリケーションは多数のコンポーネントで構成されているため、正しいアンインストール方法は、コントロール パネルを使用するか、私がユーザーに提供するアンインストール ショートカットを使用することです。
ユーザーがアンインストールを選択したときに Firefox が実行されているかどうかを制御することはできません (おそらく、アンインストーラーで実行されているかどうかを検出し、ユーザーにそれを閉じて続行するように要求することができます)。
アンインストーラーの目的は、プログラムのすべての痕跡をエンドユーザーのシステムから削除することです。つまり、次のようになります。
- 拡張機能コンポーネントを含む、Program Filesフォルダーの下のすべてのファイル
- Firefox からアドオンを削除します (HKEY_CURRENT_USER\Software\Mozilla\Firefox\Extensions の下のレジストリ キーを削除すると、次の Firefox の再起動時にアドオンが登録解除されます)。
- アプリケーション固有のレジストリ キーを削除する
次に、アンインストール後、ネットワーク設定をコンポーネントがインストールされる前の状態に復元できるコードがユーザーのシステムに残っていません。これにより、エンドユーザーは Web を閲覧できず、非常にイライラします。
現時点でこれを行う方法を理解できる唯一の方法は、コンポーネントでウィンドウのレジストリにユーザープロファイルフォルダーの場所を書き込むことです-これはアドオンで実行できます:
Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties).get("ProfD",
Components.interfaces.nsIFile).path
そして、アンインストーラーにその場所の prefs.js ファイルを直接変更させます。ただし、これは、アンインストール中に Firefox が実行されていないことを保証できる場合にのみ機能します(prefs.js は FF のクローズ時に書き直されるため)。
私にとって、これはエレガントな解決策ではありません:
- 将来の FF リリースで変更される可能性がある prefs.js で使用される形式とシンボルに依存するため、将来の証明ではないようです。
- Firefox には、常に適切に閉じるとは限らないという厄介な癖があります (インストールされている他のアドオンによって、Firefox がメモリから完全にアンロードされないことがあります。これにより、アンインストーラーが壊れてしまいます)。
- ユーザーがすべて私のアドオンを使用して複数の FF プロファイルをセットアップしている場合、これは (精巧な変更なしでは) 機能しません。
この単純なタスクを達成するためのより良い、または「標準的な」方法はありますか?