回答:
$HOME/.config/your-app/
。これは、問題の@grepオブジェクトを処理するために作成されたソリューションです。そして、驚いたことに、最新のLinux(および* BSDの誰もがGNOMEを使用できるほどクレイジー)もgconf
スイートにレジストリを持っています。FOSSは選択肢を
ユーザーの視点とプログラマの視点の両方からこれに来ると、ファイルの関連付けやマシン固有の設定のようなものでない限り、レジストリに何かを入れることは本当に良い言い訳にはならないでしょう。
私は、プログラムはインストールされた場所から実行可能である必要があり、インストールはマシン内で、または別のマシンにさえ完全に移動可能であり、その実行に影響を及ぼさないべきであると言う学派から来ました。
構成可能なオプション、または必要なDLLなどが共有されていない場合は、インストールディレクトリのサブディレクトリに配置して、インストール全体を簡単に移動できるようにする必要があります。
私はプログラムのような小さなユーティリティをたくさん使用しているので、USBスティックにインストールして別のマシンに接続して実行するだけでは、私には適していません。
マイクロソフトのポリシー:
レジストリはマシンに依存しています。速度が遅くなり、必要なものを見つけることはほとんど不可能なので、私はそれを好きになりませんでした。だからこそ、シンプルなiniファイルやその他の設定ファイルが好きです。それらがどこにあるか(アプリケーションフォルダーまたはユーザーフォルダー)を知っているので、簡単に移植でき、人間が読めるようになります。
いつ -レガシー統合が原因で、または顧客のシステム管理者が「そうなるはず」と言ったり、XMLの使用をより困難にする古い言語で開発していることが原因である。
理由 -主に、レジストリは、アプリケーションの隣にある設定ファイルをコピーするほど移植性がないためです(ほとんど同じ名前で呼ばれます)。
.Net2 +を使用している場合は、App.ConfigファイルとUser.Configファイルがあり、DLLをレジストリに登録する必要がないため、このファイルに近づかないでください。
設定ファイルには独自の問題がありますが(下記を参照)、これらをコーディングして、アーキテクチャを変更できます。
ユーザーのローミングプロファイルで利用できるようにしたい設定は、ユーザーのApplication Dataフォルダーを手動で探す手間を省きたい場合を除いて、おそらくレジストリに登録する必要があります。:-)
あなたが新しいアプリを開発している、あなたは移植性を気にした場合、あなたはすべきNEVERウィンドウ内のデータを格納していない他のOSは、(Windowsの場合)、レジストリがありませんので、レジストリ(当たり前注意を-これは明白かもしれないが、しばしば見落とされます)。
Winプラットフォーム用にのみ開発している場合は、できるだけ避けてください。構成ファイル(暗号化されている可能性がある)は、より優れたソリューションです。レジストリにデータを保存しても利益はありません(たとえば、.NETを使用している場合は、分離ストレージがはるかに優れたソリューションです)。
少し話題から外れていますが、移植性について懸念している人がいるので、今まで使った中で最も良い方法はQtのQSettingsクラスです。設定の保存を抽象化します(Windowsのレジストリ、Mac OSのXML設定ファイル、UnixのIniファイル)。クラスのクライアントとして、私はレジストリやその他について疑問に思って頭を悩ませる必要はありません。それはJust Works(tm)です。
通常、設定をレジストリに入れない場合は、主に現在のWindows設定の取得、ファイルの関連付けの変更などに使用し
ます。ソフトウェアが既にインストールされているかどうかを検出する必要がある場合は、レジストリに最小限のエントリを作成できます。 、それはあなたがどんな設定でも見つけることができる場所です。または、アプリケーションデータで特定の名前のフォルダを検索します。
Document and Settingsフォルダーを見ると、Unixドット表記を使用してフォルダーを設定しているソフトウェアがたくさんあります。 .jindent .jogl_ext(など)
アプリケーションデータでは、エディタ名またはソフトウェア名を含むさまざまなフォルダ。少なくともポータブルアプリケーションの中で、現在の傾向のように見えます...
WinMergeは少し異なるアプローチを使用し、データをレジストリに保存しますが、構成ダイアログでオプションのインポートとエクスポートを提供します。
.NETでは、本当に必要はありません。
これを行うためにプロジェクトプロパティを使用する方法を示す2つの例を次に示します。
これらの例では、Windowsユーザープロジェクトのプロパティでこれを行っていますが、アプリケーションでも同じことができます/できます。
詳細はこちら:
(ディスカッションの後半ですが)短い回答:グループポリシー。
顧客のIT部門が、リンク速度、カスタムエラーメッセージ、または接続するデータベースサーバーなど、書き込み中またはバンドルしているWindowsまたはコンポーネントに関連する設定を適用したい場合でも、これは通常、グループポリシーを介して行われ、レジストリに保存された設定として最終的に現れます。このようなポリシーは、Windowsの起動時またはユーザーのログイン時から適用されます。
コンポーネントの設定をレジストリの場所にマップできるカスタムADMXテンプレートを作成するツールがあり、管理者に適用する必要のあるポリシーを適用するための共通のインターフェイスを提供し、この方法で適用する意味のある設定のみを表示します。
私は、Windowsレジストリは良い考えだと思いますが、アプリケーション開発者からの多大な虐待と、Microsoftが推奨/義務付けていない標準ポリシーのため、管理できない獣になりました。あなたが言及した理由で私はそれを使うのが嫌いですが、それを使うことが理にかなっているいくつかの場合があります: