Recibo un error de excepción system.configuration.settingspropertynotfoundexception en el servicio de Windows
-
28-10-2019 - |
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?
Solución
Esto simplemente significa que la aplicación no puede leer el archivo .Settings.Puedo pensar en dos posibles causas:
-
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.
-
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);
}