Pergunta

Eu sou um novo programador do Windows e eu não tenho certeza por onde devo armazenar configurável pelo usuário configurações do aplicativo.Eu entendo a necessidade de fornecer uma interface amigável de meios para o usuário alterar as configurações da aplicação, como uma Edição | Definições de formulário ou similar.Mas onde devo armazenar os valores após o usuário pressiona o botão Aplicar no formulário?

Quais são os prós e contras de armazenar configurações no registro do Windows vs.armazená-los em um local INI ficheiro ou arquivo de configuração ou semelhante?

Foi útil?

Solução

Prós do arquivo de configuração:

  1. Fácil de fazer.Não precisa saber qualquer chamadas de API do Windows.Você só precisa saber o ficheiro de interface de e/S de sua linguagem de programação.
  2. Portátil.Se a porta de sua aplicação para outro sistema operacional, você não precisa alterar as suas definições de formato.
  3. Editáveis pelo utilizador.O usuário pode editar o arquivo de configuração, fora do programa em execução.

Prós do registro:

  1. Seguros.O usuário não pode excluir acidentalmente o arquivo de configuração ou corromper os dados, a menos que ele/ela sabe sobre o regedit.E, em seguida, o usuário é pedir para ter problemas.
  2. Eu não sou nenhum especialista, programador do Windows, mas tenho certeza de que usando o registro torna mais fácil fazer outras específicas do Windows coisas (configurações específicas do usuário, administração de rede, essas coisas de política de grupo, ou qualquer outra coisa).

Se você só precisa de uma simples maneira de armazenar informações de configuração, gostaria de recomendar um arquivo de configuração, usando INI ou XML como formato.Eu sugiro usar apenas o registro se há algo específico que você deseja para sair usando o registro.

Outras dicas

Jeff Atwood tem um grande artigo sobre o Windows' registro e por que é melhor usar .Arquivos INI em vez disso.

Minha vida seria um heck de muito mais fácil se per-configurações do aplicativo foram armazenados em um lugar que eu poderia facilmente vê-los, manipulá-los e apoiá-los.Como, digamos...em arquivos INI.

  • O registro é um ponto único de falha.É por isso que cada registro único de edição de ponta, você vai sempre encontrar começa com um grande e gordo gritando de isenção de responsabilidade sobre como você pode quebrar o seu computador com o regedit.
  • O registo é opaco e binário.Tanto quanto eu não gosto do parêntese em ângulo de impostos, pelo menos XML arquivos de configuração são razoavelmente legível, e eles permitem que como muitos comentários como você vê o ajuste.
  • O registro tem que ser em sincronia com o sistema de arquivos.Excluir um aplicativo sem "desinstalar" e você é deixado com obsoletas do registro cruft.Ou se um aplicativo tem um mal escritos desinstalador.O sistema de arquivos não é mais a declaração de registo, tem de ser mantida em sincronia com o registro de alguma forma.É uma total violação do princípio DRY.
  • O registo é monolítico.Digamos que você queria para mover uma aplicação para um caminho diferente na sua máquina, ou mesmo para uma máquina diferente por completo.Boa sorte extrair as configurações relevantes para que um determinado aplicativo da gigante de registro tarball.Uma dada aplicação, normalmente, tem dezenas de configurações espalhados por todo o registro.

De acordo com a documentação GetPrivateProfileString, você deve usar o registro para armazenar informações de inicialização do.

No entanto, assim dizendo, se você ainda deseja usar .arquivos ini, e usar o perfil padrão de APIs (GetPrivateProfileString, WritePrivateProfileString, e afins), para acessá-los, eles fornecem construído-em maneiras de fornecer automaticamente "virtual .arquivos ini" feito pelo registro.Ganha-ganha!

Há uma pergunta semelhante aqui que cobre alguns dos prós e contras.

Sugiro não utilizar o registo, a menos que seu aplicativo absolutamente precisa.No meu entendimento, a Microsoft está tentando desencorajar o uso de registro devido à flexibilidade de configurações de arquivos.Também, eu não recomendaria usar .arquivos ini, mas em vez disso, usando alguns dos built-in funcionalidade para .Líquido para a economia de usuário/configurações do aplicativo.

Uso de um arquivo ini, no mesmo diretório da aplicação, é possível efectuar-se com a aplicação.Então, depois que você recarregar o seu sistema operacional, você pode simplesmente restaurar o diretório de aplicativo, e você tem a sua configuração, da maneira que você deseja.

Há mais uma vantagem de usar um arquivo INI sobre o registro que eu não vi mencionado:Se o usuário estiver usando algum tipo de volume/ficheiro de base de criptografia, que podem chegar a INI arquivo a ser criptografado muito facilmente.Com o registro, ele provavelmente será mais problemático.

Como Daniel indicado, o armazenamento de dados de configuração no registro dá-lhe a opção de usar os Modelos de Administração.Ou seja, você pode definir um Modelo de Administração, usá-lo em uma Diretiva de Grupo e administrar a configuração de sua aplicação em toda a rede.Dependendo da natureza da aplicação, esta pode ser uma grande benção.

Eu concordo com o Daniel.Se é um grande aplicativo, eu acho que eu faria as coisas no registro.Se é um pequeno aplicativo e você deseja para ter seus aspectos configuráveis pelo usuário, sem fazer um formulário de configuração, vá para uma rápida arquivo INI.

Eu costumo fazer a análise de como este (se o formato .arquivo ini é opção = valor de 1 por linha, comentários começam com #):

static void Parse()
{
    StreamReader tr = new StreamReader("config.ini");
    string line;
    Dictionary<string, string> config = new Dictionary<string, string>();

    while ((line = tr.ReadLine()) != null)
    {
        // Allow for comments and empty lines.
        if (line == "" || line.StartsWith("#"))
            continue;

        string[] kvPair = line.Split('=');

        // Format must be option = value.
        if (kvPair.Length != 2)
            continue;

        // If the option already exists, it's overwritten.
        config[kvPair[0].Trim()] = kvPair[1].Trim();
    }
}

Editar:Desculpe, eu pensei que você tinha especificou o idioma.A implementação acima é em C#.

O registo é otimizado para acesso rápido e fácil a atualização, e é a única maneira de fazer certas Windows coisas específicas, como a associação com uma extensão.E você pode ignorar o argumento sobre como excluir um diretório único para desinstalar o programa - o Windows Vista não permite que você modificar os arquivos no diretório Arquivos de programas, para a sua configuração vai precisar de ir em uma pasta diferente de qualquer jeito.

Há uma orientação geral para a programação do Windows - fazer as coisas do jeito que a Microsoft espera que você, e sua vida será muito mais fácil.

O que disse, eu posso ver o apelo do arquivo INI, e eu não culpo ninguém por considerar a ele.

O existente respostas cobrir um lote de terreno, mas eu pensei que eu gostaria de mencionar um outro ponto.

Eu usam o registro para armazenar configurações de todo o sistema.Isto é, quando 2 ou mais programas tem exatamente a mesma configuração.Em outras palavras, uma definição partilhado por vários programas.

Em todos os outros casos eu uso um local de arquivo de configuração que fica no mesmo caminho do executável ou um nível abaixo (em um diretório de Configuração).As razões são já tratados em outras respostas (portátil, pode ser editado com um editor de texto, etc.).

Por que colocar configurações de todo o sistema para o registro?Bem, eu achei que, se uma definição é compartilhada, mas do que está a utilizar ficheiros de configuração você acaba a duplicação de configurações.Isso pode significar que você necessidade de alterar uma configuração em vários lugares.

Por exemplo, digamos que o Programa de Um Programa e B apontam para o mesmo banco de dados.Você pode ter um "todo o sistema" definição de registo para a seqüência de caracteres de conexão.Se você quer apontar para um banco de dados diferente, você pode alterar a seqüência de conexão em um só lugar, e os dois programas será executado agora contra a outra base de dados.

Nota - não há nenhum ponto em utilizar o registo desta forma, se dois ou mais programas que não precisam usar os mesmos valores.Tais como, o Programa A e B de Programa, tanto que necessitam de uma conexão de banco de dados de seqüência de caracteres que pode ser o mesmo, mas não sempre.Por exemplo, eu quero que o Programa B agora utilizar um banco de dados de teste, mas o Programa deve continuar usando um banco de dados de produção.

Com o exemplo acima, você poderia ter algumas local de substituição de configuração configurações de todo o sistema, mas pode começar a ficar muito complicado para tarefas simples.

Há uma desvantagem para ini ou arquivos de configuração e que está localizando-los, se o usuário tem a opção de selecionar onde o programa está instalado.

É o Aplicativo que é instalado com um Programa de Instalação, ou é apenas "Extraia e Execute"?No primeiro caso, observar os prós e contras descritos aqui.Mas para Extrair e executar, o serviço de Registo é na minha opinião um "no-go", como as pessoas esperam ser capazes de simplesmente apagar a pasta do aplicativo para se livrar de seu programa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top