Properties.Settings.Defaultはどこに保存されますか?


145

私はこれを知っていると思っていましたが、今日私は間違っていることが証明されています-再び。

VS2008、.NET 3.5、C#を実行します。ユーザー設定を[プロパティ設定]タブにデフォルト値で追加し、次のコードを使用してそれらを読み込みます。

myTextBox.Text = Properties.Settings.Default.MyStringProperty;

次に、ユーザーがオプションダイアログで値を編集した後、次のように保存します。

Properties.Settings.Default.MyStringProperty = myTextBox.Text;
Properties.Settings.Default.Save();

私の質問は、この新しい価値はどこに保存されるのですか?実行可能ディレクトリのMyApp.exe.configファイルは更新されず、デフォルト値が含まれています。さらに、私が知る限り、そのディレクトリ内の他のファイルも更新されません。ただし、プログラムが値を読み込むと、変更された値が取得されるため、どこかに保存されていることがわかります...

これは単なる学術的なものではありません。今朝手動で値を編集できるようにする必要があり、変化しているものが何も見つからなかったときに困惑しました。


2
ストレージの場所は、フレームワークまたはOSのバージョンによって異なる場合があることに注意することが重要です。プログラムで格納場所に何かをハードコードしないでください。
グレッグD

Visual Studioを使用している場合は、新しいアプリを開発し、AppData \ Local \ Microsoft \ YOUR APPLICATION NAMEで確認します。ファイル名はuser.configです。私はWindows 7にいます
JenonD 2015年

またはAppData \ Local oneの下
KansaiRobot 2018

私が苦労していたことが、この質問などにつながりました。user.configは、applicationsSettings.Save();まで作成されません。と呼ばれます。(applicationSettingsが定義されている場合、ApplicationSettings applicationSettings = new ApplicationSettings(this);)。
合併

回答:


142

デフォルトでProgram Filesフォルダーへの読み取りアクセスのみを許可するというWindowsの新しいバージョンのポリシーで作業するには(UACで昇格を求めるプロンプトが表示されない限り、それは別のトピックです...)、アプリケーションの下%userprofile%\appdata\localまたは下に設定フォルダーがあります%userprofile%\Local Settings\Application Data実行しているWindowsのバージョンに応じて、ユーザー固有の設定。すべてのユーザーの設定を保存すると、それらはすべてのユーザープロファイル(例:)の下C:\usersまたは対応するフォルダーに保存されます。C:\Documents and SettingsC:\users\public\appdata\local


3
また、Visual Studioで生成された.configは実行可能ファイルのフォルダーに格納されますが、デバッグにのみ使用されると思います。最終的なアプリケーションをパッケージ化する場合、ユーザーがアプリケーションを初めて実行するときに生成されるため、この.configは含めません。
Eddinsは

11
新しいバージョン?これは、Windows 2000以降のケースです。管理者として実行していたため、問題はなくなりました。
Joel Coehoorn、2009年

1
@Joel Coehoorn:はい、ただしWindows Vista以降の管理者アカウントでは、デフォルトでUAC昇格プロンプトがないとProgram Filesへの書き込みアクセスを取得できません。それが変更されたポリシーです。:)
jasonh 2009年

2
また、フォルダはバージョンのアップグレードごとに変わるため、ソフトウェアを更新するたびにユーザーは設定を失うことに注意してください。
Ian Boyd

17
実際には、そうではありません。設定を作成し、「UpgradeNeeded」のような名前を付け、デフォルトでtrueにする必要があります。次に、アプリが起動したら、これを確認します。trueの場合、Properties.Settings.Default.Upgrade()、. Save()および.Reload()を呼び出します。次に、UpgradeNeededをfalseにリセットして保存します。
jasonh

86

プログラムでパスを取得できます。

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;

1
うーん、これによって返されるパスが設定で使用されるパスではない状況を見ています。洞察はありますか?
George Mauer

1
@GeorgeMauerというRoamingか、LocalLow代わりにLocalConfigurationUserLevelローミングまたはローカルであるユーザーのプロファイルに依存します。企業ではローミングすることがよくあります。
Kay Zed

この回答とその下の私のコメントにリンクして、パスがどのように見えるかを示します。
Kay Zed

私はどこでもこれと同じ答えを見つけています。ConfigurationManager.OpenExeConfiguration()を使用します。ただし、渡したConfigurationUserLevelの値に応じて3つのオプションが提供され、3つの異なる結果が得られます。プログラム、コード、実行時に、プログラムが設定を取得しているファイルを正確にどのようにして見つけますか?
デイブ

なし:すべてのユーザーに適用される構成を取得します。PerUserRoaming:現在のユーザーに適用されるローミング構成を取得します。PerUserRoamingAndLocal:現在のユーザーに適用されるローカル構成を取得します。
Akbaritabar

8

私を正しい方向に向けてくれてありがとう。次の場所にあるuser.configを見つけました:c:\ users \ USER \ AppData \ Local \ COMPANY \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user.config。

アプリケーションのバージョンを上げる必要があり、すべての設定が消えたようです。アプリケーションは、新しいバージョンで新しいフォルダーを作成し、デフォルト設定を使用しました。ファイルが保存されている場所を見つけるのに長い時間がかかりましたが、その後、設定を新しいバージョンに取得するための単純なコピーと貼り付けでした。


LOOKSLIKESOMEKINDOFHASHをどのように知っていますか?
NeoSvet

1
Properties.Settings.Default.Upgrade()呼び出しは同じことを自動的に行います。上記の@jasonhが他の返信で述べたように、以前のバージョンから設定を復元します。
Alex

5

Documents and Settings \%user%\ Local Settings \ Application Data ...... etcに保存され、そこでuser.configというファイルを検索します

ただし、場所は変わる場合があります。


5
実際、ユーザー固有のプロパティの正しい環境変数は%userprofile%です。Vistaまたは7でドキュメントと設定を指定すると、フォルダーが見つからないか、見つかったフォルダーへのアクセス許可が失われます。
jasonh 2009年

1

私のWindowsサービスの1つがWindows Server 2016のローカルシステムとしてログオンしています。C:\ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {your application name}の下にuser.configがあります。

Cドライブでアプリケーション名を検索し、user.configがどこにあるかを確認するのが最も簡単な方法だと思います


0

ユーザー固有の設定は、そのアプリケーションのユーザーのApplication Dataフォルダーに保存されます。user.configファイルを探します。

そもそもユーザーは実行可能ディレクトリーへの書き込みアクセスさえ持っていないことが多いので、私はあなたが何を期待していたのかわかりません。


0

彼らは内に保存されYOUR_APP.exe.configたファイルを同じフォルダに保存され、YOUR_APP.exeファイル<userSettings>のセクション:

   <userSettings>
      <ShowGitlabIssues.Properties.Settings>
         <setting name="SavedUserName" serializeAs="String">
            <value />
         </setting>
         <setting name="SavedPassword" serializeAs="String">
            <value />
         </setting>
         <setting name="CheckSave" serializeAs="String">
            <value>False</value>
         </setting>
      </ShowGitlabIssues.Properties.Settings>
   </userSettings>

ここにCSコードがあります:

public void LoadInfoLogin()
{
    if (Properties.Settings.Default.CheckSave)// chkRemember.Checked)
    {
        txtUsername.Text = Properties.Settings.Default.SaveUserName;
        txtPassword.Text = Properties.Settings.Default.SavePassword;
        chkRemember.Checked = true;
    }
...

-1

Microsoft Storeからのアプリの設定がどこにあるのか疑問に思う方のために、それらはWindowsAppsのいずれかにあります。これは非常にロックダウンされていますが、アプリを開いてからタスクマネージャーでファイルパスを開くことによってそこに到達できます。

しかし、それらは保存されている可能性が高いです C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.


-17

プロジェクトのルートフォルダーの下に "Properties"というフォルダーがあり、そのフォルダーの下に* .settingsファイルがあります。それはそれが格納される場所です。


1
それはそうですな発展中。展開後、他の場所に移動します。
Joel Coehoorn、2009年

2
これを開発環境で実行したところ、ファイルは変更されていません。そこにはデフォルト値のみが保存され、更新は保存されません。
スタンR.

4
スタンRは正解です。デフォルト値のみが保存されます。デバッグ中に変更できる値ではありません。
匿名タイプ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.