2013-03-23 11 views
6

Mam program, który zamierzam wdrożyć przy użyciu pakietu dla wdrożenia wbudowanego w VS.Pozwolenie użytkownikom na edycję pliku konfiguracyjnego po wdrożeniu

Teraz mam plik app.config, który chcę, aby użytkownik mógł modyfikować (nawet po uruchomieniu programu), ale nie mam pojęcia, gdzie dokładnie instalator zrzuca pliki i nie spodziewam się użytkownicy rootować wokół swojego systemu plików.

To, co myślałem, to - proszę użytkownika o wskazanie jakiegoś katalogu (który i tak musi się wydarzyć od czasu jego gry) - sprawdzam plik konfiguracyjny tam, a jeśli go tam nie ma, kopiuję go z katalogu głównego katalog, który program może zobaczyć - następnie przeczytaj ten w folderze "zapisz".

To powiedziawszy, brzmi jak bardzo brzydkie i hacky rozwiązanie - czy jest lepszy?

Odpowiedz

8

Nie zachęcam użytkowników do modyfikowania pliku app.config. Plik app.config jest kopiowany do tego samego katalogu, co aplikacja appe i zwykle zawiera ustawienia, których działanie zależy od aplikacji, np. Ciągi połączeń DB, domyślne ustawienia systemowe itp. Granie w niebezpieczną grę poprzez umożliwienie użytkownikom bezpośredniej zmiany ustawień.

Bezpieczniejszym rozwiązaniem byłoby wyeksportowanie innego pliku XML do folderu dokumentów użytkowników, w którym mogą zastąpić ustawienia aplikacji. Najpierw załaduj aplikację w pliku app.config, a następnie zastąp te wartości dowolnymi ustawieniami znajdującymi się w pliku konfiguracyjnym użytkownika.

Polecam również wdrożenie jakiegoś interfejsu użytkownika, nawet jeśli jest to naprawdę podstawowe. Twój przeciętny użytkownik nie będzie miał łatwego edytowania XML-a, zbyt dużego marginesu błędu.

+0

Uzgodniono - zezwolenie użytkownikowi na edycję pliku app.config bezpośrednio powoduje problemy, ponieważ trudniej jest obsłużyć wszelkie wyjątki, które mogą wyniknąć. Jeśli rzucisz własną, podlegającą klasyfikacji serum klasę i sam będziesz zarządzał nią, łatwiej będzie sobie poradzić z wyjątkami. –

+0

Ciekawe, nie uważałem tego. Wydaje mi się, że zastosuję własny format, ponieważ nie jestem zbyt wielkim fanem modyfikującej ręcznie XML, i nie jestem pewien, ile parametrów będę potrzebował (prawdopodobnie tony). – Haedrian

+0

Nic przeciwko staczaniu się własny format, należy jednak pamiętać, że trzeba również przetasować własny serializator. Gdzie jako .NET ma świetną obsługę XML zapiekaną, co sprawiłoby, że robienie czegoś takiego było banalne. – James

1

Możesz użyć ustawień aplikacji (lub użytkownika), aby zachować wszystkie zmiany, które użytkownik może chcieć wprowadzić w konfiguracji. Zobacz klasę ApplicationSettingsBase i this article. Say aplikacja zawiera ustawienie użytkownika nazywane Score udało wewnętrznie przez klasę o nazwie MyUserSettings:

public class MyUserSettings : ApplicationSettingsBase 
{ 
    [UserScopedSetting()] 
    [DefaultSettingValue(0)] 
    public int Rank 
    { 
     get 
     { 
      return (int)this["Score"]; 
     } 
     set 
     { 
      this["Score"] = value; 
     } 
    } 
} 

można zapisać bieżące wartości, zwykle, gdy główną formą jest zamknięcie metodą Save:

myUserSettings.Save(); 

Jeśli chcesz, aby użytkownicy zmienili niektóre ustawienia bezpośrednio, możesz użyć siatki właściwości lub własnego formularza wiążącego instancję klasy MyUserSettings. Jeśli ustawienia są oznaczone jako "Użytkownik", wartości będą przechowywane w pliku , w %InstallRoot%\Documents and Settings\username\Local Settings lub %InstallRoot%\Documents and Settings\username\Application Data (dla profilów mobilnych).

Powiązane problemy