2009-11-06 19 views
12

とにかくデフォルト値から変更できない場合はどうすればよいですか?修辞的な質問。アプリケーションスコープの設定を読み取り専用にするにはどうすればよいですか?

まず、設定システムを迂回してアプリケーションスコープ設定ファイルに直接書き込む最良の方法は何ですか(次の段落のセキュリティ問題)。 XmlReader/XmlWriter?

IIRCの場合、アプリケーションがProgram Filesフォルダに書き込もうとすると、Windows Vistaと7はそれを防ぐためにいくつかの魔法を実行します。私はUACに呼び出す必要があると思うし、私はアプリケーションのオプションウィンドウのOKボタンの上にその派手なシールドアイコンを置く必要があります。簡単なハウツーへのリンク?

また、私がしようとしていることは愚かであり、変更可能なアプリケーションスコープ設定を別の場所に保存する必要があることを教えてください。

答えて

10

「ユーザー」設定に変更するとコードで変更でき、Save()を呼び出すと、現在のユーザーのローカル設定フォルダのuser.configファイルに保存されます。

明らかに、これは、すべてのユーザーごとに異なる可能性があることを意味します。一般的に、すべてのユーザーに共通のグローバルアプリケーション設定は、コードで変更されません。これは、ユーザーの変更が他のユーザーに影響するためです(アプリの設定は読み取り専用です)。

ユーザースコープにしたくない場合は、ConfigurationManagerクラスをご覧ください。これにより、手動で.configファイルを読み書きすることができます。ただし、c:¥program files¥フォルダは保護されており、通常のユーザーはアクセスできません(これにより、vista/win7のUACプロンプトまたはエラーが発生します)。どのように扱うかを慎重に検討し、app.configの変更がすべてのユーザーに影響することに注意してください。

すべてのユーザーに書き込みアクセスが保証されている場所はありません。ここ

+2

しかし、それは私が欲しいものです!ユーザーAは何かを変更し、ユーザーBはその変更を繰り返す必要はありません。 – CannibalSmith

+9

多くの人がこの機能を必要としないことは私には奇妙です。確かに、アプリケーションの多くは、プログラマがフレンドリーなUIを構築したいというグローバル設定を持っています。 –

+1

@Ben - 設定をグローバルに直接保存する場合は、[ConfigurationManager](http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx)クラスを使用できます。 exe.configファイル。明らかに、そのファイルがc:¥programfiles¥にある場合、ユーザーには適切な管理者権限が必要です。まず次のようにconfigを開きます:var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);次のように新しい設定を追加します:config.AppSettings.Settings.Add( "key"、 "value"); (またはカスタム設定セクションを作成できます)saveを呼び出すことを忘れないでください。 –

0

ルック:Best practice to save application settings in a Windows Forms Application

ApplicationSettingsクラスは app.configファイルに設定を保存しない サポートしています。これは、 デザインでは、非常によく、 のセキュリティで保護されたユーザーアカウント(Vista UACと思う)で動作するアプリケーション には、 プログラムのインストールフォルダへの書き込みアクセス権がありません。

ConfigurationManagerクラスを使用してシステムと戦うことができます。しかし、 の簡単な回避策は、 設定デザイナーに入り、 設定の有効範囲をユーザーに変更することです。 が苦労を強いられる場合(つまり、すべてのユーザーに関連する設定が の場合)、 特権昇格のプロンプトが表示されるように、 プログラムに別の プログラムにオプション機能を追加する必要があります。または、 の設定を使用しないでください。

関連する問題