Settings scope - jak zaktualizować wartość przy aktualizacji programu?

0

Chodzi o wyświetlanie komunikatu z informacjami o zmianach w danej aktualizacji. Ma się pojawiać przy starcie programu, chyba że użytkownik kliknie "Nie pokazuj więcej".

Wymyśliłam, że zrobię w Settings zmienną ShowUpdateInfo, ustawię na true, a jak użytkownik kliknie "Nie pokazuj więcej" to ustawię jej false.
No tak, tylko że jak zrobię scope na Application, to nie mogę mu przypisywać wartości.
A jak zrobię scope na User, to jak użytkownik raz zmieni, to po aktualizacji też będzie miał false :/

Zaczynam myśleć, że użycie Settings nie było takim dobrym pomysłem. Ale jeśli nie tak, to jak?
Gdzie byście przechowali zmienną w takim przypadku?

Nie to, żebym nie miała pomysłów ;) Prawie cały rejestr stoi otworem :P Zastanawiam się jednak, jakby to zrobić naprawdę ładnie...

1

User scope jest dobrym miejscem. Po aktualizacji (w sensie nowej wersji z innym numerem wersji) przyjmą sie chyba wartości domyślne. Tak mi sie przynajmniej wydaje bo kiedyś musiałem pisać obsługę przepisywanie ustawień z user scope ze starszej wersji do nowszej bo po instalacji nowej wrsji byly domyślne ustawienia.
Zawsze przy uruchomieniu mozesz sprawdzać jakiś bit w ustawieniach (IsUpdated) ktory domyślnie jest na false i ustawiać sobie co chcesz w settings niwej wersji.

0

Niestety, aktualizacja (czyli zmiana w pliku app.config) nie zmienia w plikach ustawień usera, gdy scope = User. Musiałabym znajdywać folder ustawień użytkownika, a to raczej nie będzie proste...
Zapiszę sobie wersję zmian, którą użytkownik ostatnio widział ;) Jeśli będzie mniejsza od aktualnej - będzie trzeba pokazać okienko.

0

Ciekawe. Mi sie settings w user scipe zapisuja w filderze z numerem builda. Zmianiam numer builda i tworzy mi sie folder z ustawieniami z nowym numerem. Jestem dzisiaj poza biurem jutro sprawdze i napisze jak to u mnie jest dokladnie.

0

U mnie jest tak

We właściwościach projektu jest zakładaka Settings. Dodaję tam nowy plik i w tym pliku wstawiam jakaś flagę bool o nazwie np. IsNewVersion z wartością true.

Gdzieś w programie sprawdzam czy jest nowa wersja

bool isNew = Properties.Settings.Default.IsNewVersion;

jeśli tak to wyświetlasza okno z informacjami. jak user zaznaczy opcję Nie Pokazuj W Przyszłosci to zmieniasz flagę na false i zapisujesz.

Properties.Settings.Default.IsNewVersion = false;
Properties.Settings.Default.Save();

U mnie tworzy się wtedy plik w appdata\local\NZAWAPLIKACJI\Nazwa XEEXca z jakimś ID\NUMER WERSJI (np 1.0.0.0)\user.config

jak zmienię numer wersji w Assembly Information (Karta Application w Properties) to po uruchomieniu programu

bool isNew = Properties.Settings.Default.IsNewVersion;

isNew jest ustawiona na true (bo taka jest wartość domyślna w projekcie).
jak ją zmienią na false i zapiszę, to tworzy się nowy folder z numerem wersji np1.1.0.0.

U siebie wykorzystuję to do aktualizacji ustawień z poprzedniej wersji bo mam tam ze 100 jakichś parametrów typu widzialność tabelek, pozcje suwaków itp. w taki sposób

                bool ConfUpdated = Properties.Settings.Default.Updated; // to jest domyślnie false w projekcie i zawsze jest false po wgraniu nowej wersji.
                if (!ConfUpdated)
                {
                    Properties.Settings.Default.Upgrade();
                    Properties.Settings.Default.Updated = true;
                    Properties.Settings.Default.Save();
                }

1 użytkowników online, w tym zalogowanych: 0, gości: 1