Domanda

Ho un'app per Windows che utilizza SettingsProvider per leggere le impostazioni di configurazione e imposta i valori predefiniti se il file non esiste.

Funziona correttamente se funziona normalmente.

Sto cercando di scrivere un servizio Windows che avvii questa app.Quando viene eseguito dal servizio, ottengo System.Configuration.SettingsPropertyNotFoundException su tutti gli attributi di impostazione.

Come posso risolvere questa eccezione quando il servizio esegue l'app?

È stato utile?

Soluzione

Questo significa semplicemente che l'app non può leggere il file .Settings.Posso pensare a due possibili cause:

  1. Il servizio viene eseguito con un account che non ha accesso al file .settings.(o file .config, a seconda) Ciò è improbabile perché il servizio può avviare l'app e non avrebbe senso che disponga delle autorizzazioni per l'app e non per il file delle impostazioni.

  2. Il runtime non può trovare il file delle impostazioni.Si aspetta che le impostazioni siano nel percorso di avvio principale dell'eseguibile.Verificare che sia presente sulla macchina in questione.

Tuttavia, un risultato di Google ha rivelato una possibile causa ovvia a cui non avevo pensato.Le impostazioni .settings sono state aggiunte dopo l'ultima compilazione?Compila l'app in Visual Studio e riprova ...

Altri suggerimenti

Un'altra possibile causa è se scrivi un SettingsProvider personalizzato che genera un'eccezione durante Initialize.

Nel mio caso, avevo fatto questo:

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

Poiché name viene sempre passato come null, base.Initialize generava un ArgumentNullException.L'ho risolto passando un nome non nullo come questo:

    public override void Initialize(string name, NameValueCollection config)
    {
        base.Initialize(name ?? GetType().Name, config);
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top