2

私は、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 プロファイルをセットアップしている場合、これは (精巧な変更なしでは) 機能しません。

この単純なタスクを達成するためのより良い、または「標準的な」方法はありますか?

4

2 に答える 2

0

拡張機能にデフォルト ファイル( )をパッケージ化しようとしましたか? defaults/preferences/myprefs.jsFirefox 全体の既定値をオーバーライドするために機能するかどうかは確認しませんでしたが、機能するはずです。

于 2009-10-13T05:47:09.417 に答える
0

アンインストーラーは Firefox を閉じることを「要求」できませんか? 例えば、

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

私は何人かのインストーラーにこれをしてもらいました。しかし、私が覚えているアンスタラーではありません。

また、これはソリューションの将来性を保証するものでも、プロファイルを扱うものでもありません。

于 2009-10-13T15:48:31.863 に答える