¿Dónde se almacenan los Properties.Settings.Default?

145

Pensé que sabía esto, pero hoy estoy demostrando que estoy equivocado, nuevamente.

Ejecutando VS2008, .NET 3.5 y C #. Agregué la configuración de Usuario a la pestaña Configuración de Propiedades con valores predeterminados, luego los leí usando este código:

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

Luego, después de que el usuario edite el valor en el cuadro de diálogo de opciones, lo guardo así:

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

Mi pregunta es, ¿dónde se guarda este nuevo valor? el archivo MyApp.exe.config en el directorio ejecutable no se actualiza, todavía contiene los valores predeterminados. Además, por lo que puedo decir, ¡ninguno de los otros archivos en ese directorio está actualizado! Sin embargo, cuando el programa vuelve a leer el valor, obtiene el valor modificado, así que sé que se guarda en algún lugar ...

Esto no es solo académico, necesitaba poder editar manualmente el valor esta mañana y me quedé perplejo cuando no pude encontrar nada que estuviera cambiando.

DaveN59
fuente
2
Es importante tener en cuenta que la ubicación de almacenamiento puede cambiar entre diferentes versiones del marco o del sistema operativo. No codifique nada programático para la ubicación de almacenamiento.
Greg D
Si está en Visual Studio, desarrollando una nueva aplicación, verifique en AppData \ Local \ Microsoft \ SU NOMBRE DE LA APLICACIÓN El nombre del archivo es user.config. Estoy en Windows 7
JenonD
o bajo AppData \ Local one
KansaiRobot
Algo con lo que estaba luchando me llevó a esta pregunta y a otras: user.config no se crea hasta aplicacionesSettings.Save (); se llama. (donde applicationSettings se define ApplicationSettings applicationSettings = new ApplicationSettings (this);).
amalgamate

Respuestas:

142

Para trabajar con versiones más recientes de la política de Windows de solo permitir el acceso de lectura de forma predeterminada a la carpeta Archivos de programa (a menos que solicite la elevación con UAC, pero ese es otro tema ...), su aplicación tendrá una carpeta de configuración debajo %userprofile%\appdata\localo %userprofile%\Local Settings\Application Datadependiendo de la versión de Windows que esté ejecutando, para configuraciones específicas del usuario. Si almacena configuraciones para todos los usuarios, estarán en la carpeta correspondiente debajo C:\userso C:\Documents and Settingspara todos los perfiles de usuario (ej C:\users\public\appdata\local.:).

jasonh
fuente
3
Además, el .config generado en Visual Studio, que termina en la carpeta del ejecutable, creo que solo se usa para la depuración. Al empaquetar la aplicación final, no incluye este .config, ya que se genera la primera vez que el usuario ejecuta la aplicación.
Will Eddins
11
¿Nuevas versiones? Este ha sido el caso desde Windows 2000. Te saliste con la tuya porque estabas corriendo como administrador.
Joel Coehoorn
1
@ Joel Coehoorn: Cierto, sin embargo, ahora en la cuenta de administrador en Windows Vista y en adelante, no puede obtener acceso de escritura a los Archivos de programa sin una solicitud de elevación de UAC de forma predeterminada. Esa es la política que cambió. :)
jasonh
2
También debe tenerse en cuenta que la carpeta cambia con cada actualización de versión, por lo que el usuario pierde sus preferencias cada vez que actualiza el software.
Ian Boyd
17
En realidad no, no lo hacen. Necesita crear una configuración, asígnele un nombre similar a "UpgradeNeeded" y ajústelo como verdadero. Luego, cuando se inicie su aplicación, verifique esto. Si es cierto, llame a Properties.Settings.Default.Upgrade (), .Save () y .Reload (). Luego restablezca UpgradeNeeded a falso y guarde.
Jason
86

Puede obtener la ruta mediante programación:

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
Akbaritabar
fuente
1
Hmm, estoy viendo situaciones en las que la ruta devuelta por esto NO es la ruta utilizada por la Configuración. Alguna idea?
George Mauer
1
@GeorgeMauer ¿Quieres decir Roamingo tal LocalLowvez en lugar de Local? ConfigurationUserLeveldepende del perfil del usuario en itinerancia o local. En las empresas a menudo es itinerante.
Kay Zed
Vinculando esta respuesta y mis comentarios debajo, mostrando cómo se ve el camino.
Kay Zed
Estoy encontrando esta misma respuesta en todas partes, use ConfigurationManager.OpenExeConfiguration (), pero eso ofrece tres opciones dependiendo del valor de ConfigurationUserLevel que pasa, que dan tres resultados diferentes, ¿cuál es? ¿Cómo descubre, en un programa, en código, en tiempo de ejecución, exactamente de qué archivo obtiene su configuración el programa?
Dave
Ninguno: Obtiene la Configuración que se aplica a todos los usuarios, PerUserRoaming: Obtiene la Configuración de itinerancia que se aplica al usuario actual, PerUserRoamingAndLocal: Obtiene la Configuración local que se aplica al usuario actual.
Akbaritabar
8

Gracias por señalarme en la dirección correcta. Encontré user.config ubicado en esta monstruosidad: c: \ users \ USER \ AppData \ Local \ COMPANY \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user.config.

Tuve que actualizar la versión en mi aplicación y todas las configuraciones parecían haberse desvanecido. La aplicación creó una nueva carpeta con la nueva versión y utilizó la configuración predeterminada. tardó una eternidad en encontrar dónde estaba almacenado el archivo, pero luego fue simple copiar y pegar para obtener la configuración de la nueva versión.

Jeremy Ehret
fuente
¿Cómo saber LOOKSLIKESOMEKINDOFHASH?
NeoSvet
1
La llamada Properties.Settings.Default.Upgrade () haría lo mismo automáticamente. Restaura la configuración de su versión anterior, al igual que @jasonh dijo en otra respuesta anterior.
Alex
5

se guarda en sus Documentos y configuraciones \% user% \ Configuración local \ Datos de la aplicación ... etc, busque un archivo llamado user.config allí

Sin embargo, la ubicación puede cambiar.

Stan R.
fuente
55
En realidad, la variable de entorno correcta para las propiedades específicas del usuario es% userprofile%. Especificar documentos y configuraciones en Vista o 7 dará como resultado una carpeta faltante o permisos faltantes para la carpeta que encuentra.
jasonh
1

Uno de mis servicios de Windows está conectado como Sistema local en Windows Server 2016, y puedo encontrar el user.config en C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {su nombre de aplicación}.

Creo que la forma más fácil es buscar el nombre de su aplicación en la unidad C y luego verificar dónde está el usuario.

EvilDuck
fuente
0

La configuración específica del usuario se guarda en la carpeta de datos de la aplicación del usuario para esa aplicación. Busca un user.configarchivo.

No sé qué esperaba, ya que los usuarios a menudo ni siquiera tienen acceso de escritura al directorio ejecutable en primer lugar.

Joel Coehoorn
fuente
0

Se guardan en YOUR_APP.exe.config, el archivo se guarda en la misma carpeta con el YOUR_APP.exearchivo, <userSettings>sección:

   <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>

aquí está el código 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;
    }
...
Luke
fuente
-1

Para cualquiera que se pregunte dónde están las configuraciones de las aplicaciones de Microsoft Store, están en WindowsApps, que está muy bloqueado, pero puede llegar allí abriendo su aplicación y luego abriendo la ruta del archivo con el Administrador de tareas.

Pero es más probable que se guarden en C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.

Lukas
fuente
-17

Hay una carpeta llamada "Propiedades" debajo de la carpeta raíz del proyecto, y hay un archivo * .settings debajo de esa carpeta. Ahí es donde se almacena.

JW
fuente
1
Es correcto durante el desarrollo . Después del despliegue se van a otro lado.
Joel Coehoorn
2
Tenía esto ejecutándose en un entorno de desarrollo y el archivo permaneció sin cambios. solo almacena el valor predeterminado allí, no el actualizado.
Stan R.
44
Stan R es correcto, solo almacena el valor predeterminado. No los valores a los que puede cambiar durante la depuración.
Tipo anónimo