Pergunta

Eu tenho um aplicativo do Windows que usa SettingsProvider para ler as configurações e define os valores padrão se o arquivo não existir.

Funciona bem funcionando normalmente.

Estou tentando escrever um serviço do Windows que inicia este aplicativo.Quando ele é executado pelo serviço, recebo System.Configuration.SettingsPropertyNotFoundException em todos os atributos de configuração.

Como posso resolver essa exceção quando o serviço está executando o aplicativo?

Foi útil?

Solução

Isso significa simplesmente que o aplicativo não pode ler o arquivo .Settings.Posso pensar em duas causas possíveis:

  1. O serviço é executado em uma conta que não tem acesso ao arquivo .settings.(ou arquivo .config, dependendo). Isso é improvável porque o serviço pode iniciar o aplicativo e não faria sentido ter permissões para o aplicativo e não o arquivo de configurações.

  2. O tempo de execução não pode encontrar o arquivo de configurações.Ele espera que as configurações estejam no caminho de inicialização raiz do executável.Verifique se ele existe na máquina em questão.

No entanto, um resultado do Google revelou uma causa possível óbvia na qual não pensei.As configurações. Foram adicionadas após a última compilação?Compile o aplicativo no Visual Studio e tente novamente ...

Outras dicas

Outra causa possível é se você escrever um SettingsProvider personalizado que está lançando uma exceção durante Initialize.

No meu caso, eu fiz isso:

public class CustomSettingsProvider : SettingsProvider
{
    public override void Initialize(string name, NameValueCollection config)
    {
        base.Initialize(name, config);
    }
}

Como name é sempre passado como null, base.Initialize estava lançando um ArgumentNullException.Eu consertei passando um nome não nulo como este:

    public override void Initialize(string name, NameValueCollection config)
    {
        base.Initialize(name ?? GetType().Name, config);
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top