2017-07-27 1 views
0

Ich habe einen Windows-Abrufdienst, um eine automatische E-Mail alle 10 Minuten zu senden. Ich benutze Thread.Sleep(new TimeSpan(0, 10, 0));, um den Thread für 10 Minuten zu schlafen, der gerade hart codiert ist.C# Windows-Dienst - Lesen von Ini oder App.config-Datei

Um harte Codierung zu vermeiden, habe ich versucht App.config, die nicht erfolgreich war. Ich möchte die harte Codierung in einige .ini Dateien verschieben. Wie kann ich .ini Datei von C# Windows Service lesen.

EDIT: Ich versuche den untenstehenden Code von meinem Windows-Dienst zu lesen. string pollingInterval = (string)new AppSettingsReader().GetValue("PollingInterval", typeof(string)); Gibt den folgenden Fehler. Configuration system failed to initialize

+0

Mögliche Duplikate von [Lesen/Schreiben einer INI-Datei] (https://stackoverflow.com/questions/217902/reading-writing-an-ini-file) –

+2

"Ich habe' App.config' versucht, was nicht war erfolgreich." - Warum und wie war es "nicht erfolgreich"? Das wäre normalerweise der bevorzugte Weg, um solche Informationen zu speichern. Hast du https://stackoverflow.com/questions/13043530/what-is-app-config-in-c-net-how-to-use-it gelesen? – Corak

+1

Was ist das Problem bei der Verwendung einer App.config? Randnotiz: Ihre Aufgabe hört sich so an, als könnte sie einfach gelöst werden, indem Sie eine Konsolenanwendung von Windows Task Scheduler aus ausführen, anstatt einen Windows-Dienst im Leerlauf auszuführen. – Filburt

Antwort

1

App.config ist so einfach wie

string interval = ConfigurationManager.AppSettings["interval"]; 

TimeSpan t; 
TimeSpan.TryParseExact(interval, @"h\:m\:s", CultureInfo.InvariantCulture, out t); 

(Vergessen Sie nicht, die Referenz System.Configuration Montage und using System.Configuration + System.Globalization hinzufügen)

Ihre App.config:

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
     <add key="interval" value="00:10:00" /> 
    </appSettings> 
</configuration> 
2

app.config ist eine bessere Lösung als INI-Datei.

Ihre app.config Datei sehen so etwas wie unten:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
....... 
    <appSettings> 
    <add key="TimerInterval" value="10" /> 
    </appSettings> 
....... 
</configuration> 

Und lesen Sie es mögen:

int timerInterval = Convert.ToInt32(ConfigurationManager.AppSettings["TimerInterval"]); 

benötigen Sie Namespace using System.Configuration; und fügen Sie Verweis auf System.Configuration DLL zu importieren.