it-swarm.dev

Plik konfiguracyjny usługi Windows C #

Opracowałem aplikację usługi Windows przy użyciu programu Visual Studio 2008/C #.

W projekcie mam plik app.config. Po zainstalowaniu plik app.exe.config pojawia się obok pliku wykonywalnego, ale wydaje się, że nie odczytuje z niego wartości, gdy próbuję uzyskać do nich dostęp za pomocą ConfigurationManager.AppSettings.

Czy skopiował plik konfiguracyjny gdzie indziej, czy jest jakiś inny problem, o którym nie wiem?

Z góry dziękuję,

Jaskółka oknówka.

Edytuj: Nazwa pliku konfiguracyjnego to infact my_exe_file_name.exe.config, wygląda to tak:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>

    <add key="RuntimeFrequency" value="3" />

  </appSettings>
</configuration>

i próbuję czytać przez:

ConfigurationManager.AppSettings["RuntimeFrequency"]

Wartość debugowania, którą stale widzę, to „1”, a nie „3”. Czy robię tu coś złego?

27
Martin

Znalazłem błąd i był związany z uprawnieniami do plików. Po zainstalowaniu usługi moje konto użytkownika lokalnego nie miało dostępu do modyfikacji pliku app.exe.config.

Narzędzie, którego użyłem do edycji, nie informowało mnie, że odmówiono mi dostępu do zapisania pliku - to jest notatnik ++, jeśli ktoś jest zainteresowany - więc nie widziałem, że to nie zapisuje starego pliku konfiguracyjnego.

Rozwiązany teraz, dziękuję wszystkim.

Jaskółka oknówka.

26
Martin

Gdy jesteś w trybie debugowania, sprawdź i sprawdź, jakie ustawienia znajdują się w my_exe_file_name.vshost.exe.config Upewnij się również, że dostosowałeś to w pliku app.config. Visual Studio powinno zaktualizować ostateczny plik konfiguracyjny w folderach bin/debug. 

3
Aaron Fischer

Może aktualizujesz niewłaściwy plik konfiguracyjny. Powinieneś dokładnie sprawdzić, czy używasz

System.Configuration.ConfigurationManager.OpenExeConfiguration(PATH_TO_CONFIG);
2
Igor Zelaya

Ogólnie dla usług Windows, które piszę, upuszczam plik appName.exe.config do C: WINDOWS 32 

Być może masz w tym katalogu starszą wersję, w której twoja usługa otrzymuje wartość, nawet jeśli zaktualizowałeś plik konfiguracyjny w swoim projekcie.

1
Dave Baghdanov

Nazwa pliku App.config powinna zostać zmieniona na nazwa_pliku_pliku.exe.config i umieszczona w pobliżu pliku exe.

0
Alex Reitbort

Czy możliwe jest zdefiniowanie więcej niż jednej instancji wpisu RuntimeFrequency? Menedżer konfiguracji ConfigurationManager odczytuje plik od góry do dołu i przetwarza każde ustawienie osobno. Dlatego ostatnia wartość RuntimeFrequency zdefiniowana w pliku jest tą, której będzie używać. 

Jeśli chcesz wiedzieć na pewno, czy Twój plik jest używany, po prostu usunęłam lub skomentowałam dowolną definicję RuntimeFrequency (zdarzają się błędy kopiowania/wklejania) i czekam na błąd aplikacji, gdy Menedżer konfiguracji próbuje odwołać się do wpisu w Ustawieniach aplikacji, które nie istnieje.