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.

DaveN59
fonte
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.

jasonh
fonte
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;
Akbaritabar
fonte
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.

Jeremy Ehret
fonte
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

a localização pode mudar no entanto.

Stan R.
fonte
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

EvilDuck
fonte
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.

Joel Coehoorn
fonte
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;
    }
...
Lucas
fonte
-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.

Lukas
fonte
-17

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

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