Properties.Settings.Default 存储在哪里?

Posted

技术标签:

【中文标题】Properties.Settings.Default 存储在哪里?【英文标题】:Where are the Properties.Settings.Default stored? 【发布时间】:2010-11-02 05:06:53 【问题描述】:

我以为我知道这一点,但今天我再次被证明是错误的。

运行 VS2008、.NET 3.5 和 C#。我使用默认值将用户设置添加到属性设置选项卡中,然后使用以下代码读取它们:

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

然后,在用户编辑选项对话框中的值后,我将其保存如下:

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

我的问题是,这个新值保存在哪里?可执行目录中的 MyApp.exe.config 文件没有更新,它仍然包含默认值。另外,据我所知,该目录中的其他文件也没有更新!但是,当程序重新读取该值时,它会获取更改后的值,所以我知道它保存在某个地方...

这不仅仅是学术性的,今天早上我需要能够手动编辑该值,当我找不到任何正在改变的东西时,我把自己难住了。

【问题讨论】:

需要注意的是,存储位置可能会在不同版本的框架或操作系统之间发生变化。不要将任何程序化的东西硬编码到存储位置。 如果您在 Visual Studio 中开发新应用,请查看 AppData\Local\Microsoft\YOUR APPLICATION NAME 文件名为 user.config。我在 Windows 7 中 或在AppData\Local 下 我一直在努力解决的问题导致我提出了这个问题和其他问题:直到 applicationsSettings.Save(); 才创建 user.config叫做。 (其中 applicationSettings 定义为 ApplicationSettings applicationSettings = new ApplicationSettings( this );)。 【参考方案1】:

为了使用较新版本的 Windows 策略,即默认情况下只允许对 Program Files 文件夹进行读取访问(除非您提示使用 UAC 进行提升,但这是另一个主题...),您的应用程序将有一个设置%userprofile%\appdata\local%userprofile%\Local Settings\Application Data 下的文件夹,具体取决于您运行的 Windows 版本,用于用户特定的设置。如果您存储所有用户的设置,那么它们将位于所有用户配置文件的C:\usersC:\Documents and Settings 下的相应文件夹中(例如:C:\users\public\appdata\local)。

【讨论】:

另外,在 Visual Studio 中生成的 .config,最终位于可执行文件的文件夹中,我相信仅用于调试。打包最终应用程序时,不要包含此 .config,因为它是在用户第一次运行应用程序时生成的。 新版本?从 Windows 2000 开始就是这种情况。您只是侥幸逃脱,因为您是以管理员身份运行的。 @Joel Coehoorn:是的,但是现在在 Windows Vista 及更高版本的管理员帐户中,默认情况下,如果没有 UAC 提升提示,您将无法获得对 Program Files 的写入权限。这就是改变的政策。 :) 还应该注意的是,文件夹会随着每次版本升级而改变——所以每次更新软件时用户都会失去他们的偏好。 实际上不,他们没有。您需要创建一个设置,将其命名为“UpgradeNeeded”,并将其默认为 true。然后,当您的应用程序启动时,请检查此项。如果为真,请调用 Properties.Settings.Default.Upgrade()、.Save() 和 .Reload()。然后将 UpgradeNeeded 重置为 false 并保存。【参考方案2】:

您可以通过编程方式获取路径:

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

【讨论】:

嗯,我看到这样返回的路径不是设置使用的路径的情况。有什么见解吗? @GeorgeMauer 你的意思是Roaming 或者LocalLow 而不是LocalConfigurationUserLevel 取决于用户的配置文件是漫游还是本地。在公司中,它通常是漫游的。 链接到this answer 和它下面的我的cmets,显示路径的样子。 我在任何地方都能找到相同的答案,使用 ConfigurationManager.OpenExeConfiguration() - 但这会根据您传递的 ConfigurationUserLevel 的值给出三个选项,这会给出三个不同的结果 - 是什么?您如何在程序中、代码中、运行时找出程序从哪个文件获取设置? None:获取适用于所有用户的配置,PerUserRoaming:获取适用于当前用户的漫游配置,PerUserRoamingAndLocal:获取适用于当前用户的本地配置。【参考方案3】:

感谢您为我指明了正确的方向。我发现 user.config 位于这个怪物: c:\users\USER\AppData\Local\COMPANY\APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH\VERSION\user.config。

我不得不升级我的应用程序的版本,所有设置似乎都消失了。应用程序使用新版本创建了一个新文件夹并使用了默认设置。花了很长时间才找到文件的存储位置,但随后只需简单的复制和粘贴即可将设置更新到新版本。

【讨论】:

怎么知道LOOKSLIKESOMEKINDOFHASH? Properties.Settings.Default.Upgrade() 调用会自动执行相同的操作。它从以前的版本恢复配置,就像@jasonh 在上面的其他回复中所说的那样。 @NeoSvet 和其他遇到此问题的人,请参阅此 SO question 了解如何生成哈希。【参考方案4】:

它保存在您的 Documents and Settings\%user%\Local Settings\Application Data......等中搜索一个名为 user.config 的文件

位置可能会改变。

【讨论】:

实际上,用户特定属性的正确环境变量是%userprofile%。在 Vista 或 7 下指定 Documents and Settings 将导致缺少文件夹或缺少对它找到的文件夹的权限。 它帮了我很多...谢谢斯坦?【参考方案5】:

我的一个 windows 服务在 windows server 2016 中作为本地系统登录,我可以在 C:\Windows\SysWOW64\config\systemprofile\AppData\Local\您的应用程序名称下找到 user.config。

我认为最简单的方法是在 C 盘上搜索您的应用程序名称,然后检查 user.config 的位置

【讨论】:

【参考方案6】:

它们保存在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;
    
...

【讨论】:

【参考方案7】:

如果您使用的是 Windows 10,这是目录:

C:\Users\AppData\Local\

+

\1.0.0.0

【讨论】:

你知道是什么控制Url_somedata位吗?【参考方案8】:

用户特定的设置保存在该应用程序的用户应用程序数据文件夹中。查找user.config 文件。

我不知道您的期望,因为用户通常甚至没有对可执行目录的写入权限。

【讨论】:

【参考方案9】:

对于任何想知道 Microsoft Store 中应用程序设置在哪里的人,它们要么在非常锁定的 WindowsApps 中,但你可以通过打开应用程序然后使用任务管理器打开文件路径来到达那里。

但他们更有可能保存在C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.

【讨论】:

【参考方案10】:

您的项目根文件夹下有一个名为“Properties”的文件夹,该文件夹下有 *.settings 文件。这就是它被存储的地方。

【讨论】:

它是正确的在开发过程中。部署后他们会去其他地方。 我在开发环境中运行了这个,文件保持不变。它只在那里存储默认值,而不是更新的。 Stan R 是正确的,它只存储默认值。不是您在调试期间可能更改的值。

以上是关于Properties.Settings.Default 存储在哪里?的主要内容,如果未能解决你的问题,请参考以下文章