Recibo un error de excepción system.configuration.settingspropertynotfoundexception en el servicio de Windows

StackOverflow https://stackoverflow.com/questions/8404832

Pregunta

Tengo una aplicación de Windows que usa SettingsProvider para leer los ajustes de configuración y establece valores predeterminados si el archivo no existe.

Funciona bien funcionando normalmente.

Estoy intentando escribir un servicio de Windows que inicie esta aplicación.Cuando lo ejecuta el servicio, obtengo System.Configuration.SettingsPropertyNotFoundException en todos los atributos de configuración.

¿Cómo puedo resolver esta excepción cuando el servicio ejecuta la aplicación?

¿Fue útil?

Solución

Esto simplemente significa que la aplicación no puede leer el archivo .Settings.Puedo pensar en dos posibles causas:

  1. El servicio se ejecuta con una cuenta que no tiene acceso al archivo .settings.(o archivo .config, según) Esto es poco probable porque el servicio puede iniciar la aplicación y no tendría sentido que tenga permisos para la aplicación y no para el archivo de configuración.

  2. El motor de ejecución no puede encontrar el archivo de configuración.Espera que la configuración esté en la ruta de inicio raíz del ejecutable.Verifique que exista en la máquina en cuestión.

Sin embargo, un resultado de Google mostró una posible causa obvia en la que no había pensado.¿Se agregaron .settings después de la última compilación?Compile la aplicación en Visual Studio y vuelva a intentarlo ...

Otros consejos

Otra posible causa es si escribes un mensaje personalizado. SettingsProvider eso es lanzar y excepción durante Initialize.

En mi caso, había hecho esto:

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

Desde name siempre se pasa como null, base.Initialize estaba lanzando un ArgumentNullException.Lo arreglé pasando un nombre no nulo como este:

    public override void Initialize(string name, NameValueCollection config)
    {
        base.Initialize(name ?? GetType().Name, config);
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top