33

app.config には、「グローバル」にする予定の設定がいくつかあります。すべてのユーザーがそれらを変更でき、すべてのユーザーが同じ設定を取得します。

しかし、それらをユーザー設定に変更しない限り、それらは読み取り専用です。

どうしてこれなの?

また、アプリのグローバル設定を永続化するにはどうすればよいですか?

編集:

これは実際には、LocalSystem としてサービスとして実行される Windows サービス アプリケーションです。また、Windows フォームを起動して構成値を編集する引数「/config」を使用して、ローカル管理者が手動で実行することもできます。

%PROGRAMFILES%したがって、両方の状況で書き込みアクセスが可能です。

したがって、設定にアクセスする方法は次のとおりです。

Settings.Default.MySetting = MyNewValue;

また、MySetting が Application に設定されている場合 (プロジェクト プロパティの Settings.settings)、コンパイル時に「MySetting は読み取り専用です」というエラーが発生します。

私はこのようなことは初めてで、それがどのように行われることになっているのかについての非常に良い説明をまだ見つけていません. たとえば、なぜ「デフォルト」と言う必要があるのですか? また、それは実際にはどういう意味ですか? 何も思いつきません。誰かが私に app.config の使用方法のチュートリアルを教えてくれれば、それは本当に役に立ちます。

4

7 に答える 7

81

本当の完全な答え:

2 種類の設定があるため、app.config 設定は読み取り専用です。

  1. アプリケーションの設定
  2. ユーザー設定

最初のバージョンは、アプリケーションの発行者が新しいバージョンを公開しない限り変更されません。2 つ目は app.config ではなく、user.config ファイルに保存されます。この user.config ファイルがない場合、app.config はデフォルト値を提供します。

MySetting がユーザー設定の場合:

Settings.Default.MySetting = MyNewValue;
Settings.Default.Save();

user.config新しい設定でファイルが作成され[User Local Settings Application Data]\[company name]\[application].exe[hash string]\[version]、それらの設定がapp.configファイル内の設定よりも優先されます。

于 2009-10-20T01:04:58.530 に答える
4

理由:アプリケーション設定は、ユーザーが書き込み権限を持たない Program Files の下の Application フォルダーに格納されることを意図しています。

方法:「すべてのユーザー」に対する既定のサポートはありませんが、パブリック フォルダーに独自のカスタム構成ファイルをセットアップしたり、データベースを使用したりできるはずです。

于 2009-04-16T23:10:11.220 に答える
3

簡単に言えば、あなたがそうする特権を与えない限り、誰もが変更できる場所はマシン上にありません。

この種の状況に対処するには、いくつかの方法があります。

  • 構成ファイル/いくつかのレジストリ設定を作成し、これを「すべてのユーザー」プロファイルに入れて、「全員」にその特定のファイルを変更する権限を付与できます。インストール中に、適切な特権を付与する手順を自動化でき、プログラムが残りを処理できます。

  • UACを利用して、現在のユーザーがシステム全体の設定を変更するための適切な権限を持っていることを確認できます。これは推奨されるアプローチですが、すべての人が特定の設定を変更できるわけではないことも意味します。

  • 共有データベースを使用して、そこに設定を保存できます。

  • ???

プログラムファイルディレクトリの項目を変更したり、デフォルトの権限を変更したりすることはお勧めしません。

編集:ローカルシステムとして、あなたは確かにプログラムファイルディレクトリへの書き込み権限を持っています。「読み取り専用」エラーが発生した場合は、設定自体が読み取り専用であることを意味します。構成ファイルの設定を変更できるようにするには、構成マネージャーを使用する必要があります。

お役に立てれば。

于 2009-04-17T02:21:25.473 に答える
1

理由の 1 つは、app.config ファイルが Program Files ディレクトリの下のアプリのフォルダーにあり、Program Files 内のすべてが既定で標準ユーザーに対して読み取り専用であるためです。

もう 1 つは、app.config 設定がシステム全体に適用されることです。1 人のユーザーが変更を加えると、他のユーザーに影響を与えます。通常のユーザーは、そのような変更を行うことはできません。複数のユーザーに影響を与える可能性があるものは、システム管理者のみが設定する必要があります。ユーザーごとの設定は、各ユーザーの Application Data フォルダーに属します。

于 2009-04-16T23:12:24.803 に答える
0

ここで何を意味するのかよくわかりません。ユーザーが UI から app.config を変更できるようにしたのに、変更が永続化されないということですか?

呼びましたか

ConfigurationManager.RefreshSection("appSettings");

Configuration.Save();
于 2009-04-16T23:11:36.240 に答える
0

構成設定は、アプリケーションの起動時にメモリにキャッシュされます。app.config ファイルを xml として処理して、値を変更できます。

于 2009-04-16T23:14:27.840 に答える