Onde estão armazenados o Properties.Settings.Default?


145

Eu pensei que sabia disso, mas hoje estou provando que estou errado - de novo.

Executando o VS2008, .NET 3.5 e C #. Adicionei as configurações do usuário à guia Propriedades, com os valores padrão, e as li usando este código:

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

Então, depois que o usuário edita o valor na caixa de diálogo de opções, eu o salvo assim:

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

Minha pergunta é: onde esse novo valor é salvo? o arquivo MyApp.exe.config no diretório executável não é atualizado, ainda contém os valores padrão. Além disso, até onde eu sei, nenhum dos outros arquivos desse diretório também é atualizado! No entanto, quando o programa lê o valor novamente, ele recebe o valor alterado, então eu sei que ele foi salvo em algum lugar ...

Isso não é apenas acadêmico, eu precisava poder editar manualmente o valor esta manhã e fiquei perplexo quando não consegui encontrar nada que estivesse mudando.


2
É importante observar que o local de armazenamento pode mudar entre diferentes versões da estrutura ou do sistema operacional. Não codifique nada programático para o local de armazenamento.
— 11119 Greg Greg D

Se você estiver no visual studio, desenvolvendo um novo aplicativo, verifique em AppData \ Local \ Microsoft \ SEU NOME DO APLICATIVO O nome do arquivo é user.config. Estou no Windows 7
— JenonD 18/03/2015

ou sob o AppData \ Local
— KansaiRobot

Algo que eu estava lutando com isso me levou a essa e outras perguntas: user.config não é criado até applicationsSettings.Save (); é chamado. (onde applicationSettings é definido ApplicationSettings applicationSettings = new ApplicationSettings (this);).
— amalgamar

Respostas:


142

Para trabalhar com versões mais recentes da política do Windows de permitir somente o acesso de leitura por padrão à pasta Arquivos de Programa (a menos que você solicite a elevação com o UAC, mas esse é outro tópico ...), seu aplicativo terá uma pasta de configurações sob %userprofile%\appdata\localou %userprofile%\Local Settings\Application Datadependendo da versão do Windows em execução, para configurações específicas do usuário. Se você armazenar configurações para todos os usuários, eles estarão na pasta correspondente em C:\usersou C:\Documents and Settingspara todos os perfis de usuário (por exemplo:) C:\users\public\appdata\local.


3
Além disso, o .config gerado no Visual Studio, que acaba na pasta do executável, acredito que seja usado apenas para depuração. Ao empacotar o aplicativo final, você não inclui esse .config, pois ele é gerado na primeira vez que o usuário executa o aplicativo.
— Will Eddins

11
Versões mais recentes? Esse é o caso desde o Windows 2000. Você acabou de se safar porque estava executando como administrador.
— Joel Coehoorn

1
@ Joel Coehoorn: Verdade, mas agora na conta de administrador no Windows Vista e em diante, você não pode obter acesso de gravação aos Arquivos de Programas sem um prompt de elevação do UAC por padrão. Essa foi a política que mudou. :)
— jasonh

2
Também deve ser observado que a pasta muda a cada atualização de versão - para que o usuário perca suas preferências sempre que você atualizar o software.
— 11111 Ian

17
Na verdade não, eles não. Você precisa criar uma configuração, nomear algo como "UpgradeNeeded" e usar como true. Então, quando o aplicativo for iniciado, verifique isso. Se for verdade, chame Properties.Settings.Default.Upgrade (), .Save () e .Reload (). Em seguida, redefina UpgradeNeeded para false e salve.
— jasonh

86

Você pode obter o caminho programaticamente:

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

1
Hmm, estou vendo situações em que o caminho retornado por este NÃO é o caminho usado pelas Configurações. Alguma visão?
— George Mauer

1
@GeorgeMauer Você quer dizer Roamingou talvez em LocalLowvez de Local? ConfigurationUserLeveldepende do perfil do usuário estar em roaming ou local. Nas empresas, muitas vezes está em roaming.
— Kay Zed

Linkando para esta resposta e meus comentários, mostrando como é o caminho.
— Kay Zed

Estou encontrando a mesma resposta em todos os lugares, use ConfigurationManager.OpenExeConfiguration () - mas isso fornece três opções, dependendo do valor de ConfigurationUserLevel que você passa, que fornece três resultados diferentes - qual é? Como você descobre, em um programa, em código, em tempo de execução, exatamente de qual arquivo o programa está obtendo suas configurações?
— Dave

Nenhum: obtém a configuração que se aplica a todos os usuários, PerUserRoaming: obtém a configuração de roaming que se aplica ao usuário atual, PerUserRoamingAndLocal: obtém a configuração local que se aplica ao usuário atual.
— Akbaritabar

8

Obrigado por me apontar na direção certa. Encontrei user.config localizado nessa monstruosidade: c: \ users \ USER \ AppData \ Local \ COMPANY \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user.config.

Eu tive que melhorar a versão do meu aplicativo e todas as configurações pareciam ter desaparecido. O aplicativo criou uma nova pasta com a nova versão e usou as configurações padrão. demorou uma eternidade para descobrir onde o arquivo estava armazenado, mas era uma cópia e colagem simples para obter as configurações para a nova versão.


Como sabe o LOOKSLIKESOMEKINDOFHASH?
— NeoSvet 10/02/19

1
A chamada Properties.Settings.Default.Upgrade () faria o mesmo automaticamente. Ele restaura a configuração de sua versão anterior, assim como o @jasonh disse em outra resposta acima.
— 21419 Alex

5

ele é salvo em seus Documentos e configurações \% user% \ Configurações locais \ Dados do aplicativo ...... etc, procure um arquivo chamado user.config lá

a localização pode mudar no entanto.


5
Na verdade, a variável de ambiente correta para propriedades específicas do usuário é% userprofile%. A especificação de documentos e configurações no Vista ou 7 resultará na falta de uma pasta ou na falta de permissões para a pasta encontrada.
— jasonh

1

Um dos meus serviços do Windows está conectado como Sistema Local no Windows Server 2016 e posso encontrar o user.config em C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {nome do seu aplicativo}.

Acho que a maneira mais fácil é pesquisar o nome do seu aplicativo na unidade C e verificar onde está o user.config


0

As configurações específicas do usuário são salvas na pasta Dados do aplicativo do usuário para esse aplicativo. Procure um user.configarquivo.

Não sei o que você esperava, pois os usuários nem sempre têm acesso de gravação ao diretório executável.


0

Eles são salvos YOUR_APP.exe.config, o arquivo é salvo na mesma pasta que o YOUR_APP.exearquivo, <userSettings>seção:

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

aqui está o 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;
    }
...

-1

Para quem quer saber onde estão as configurações de aplicativos da Microsoft Store, elas estão no WindowsApps, que é muito bloqueado, mas você pode acessá-lo abrindo o aplicativo e depois o caminho do arquivo com o Gerenciador de Tarefas.

Mas é mais provável que eles sejam salvos em C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.


-17

Há uma pasta chamada "Propriedades" na pasta raiz do projeto e há um arquivo * .settings nessa pasta. É onde fica armazenado.


1
está certo durante o desenvolvimento . Após a implantação, eles vão para outro lugar.
— Joel Coehoorn

2
Eu tinha isso em execução em um ambiente de desenvolvimento e o arquivo permaneceu inalterado. ele armazena apenas o valor padrão lá, não o atualizado.
— Stan R.

4
Stan R está correto, apenas armazena o valor padrão. Não são os valores que você pode alterar durante a depuração.
— Tipo anônimo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.