Próbuję dostosować lokalizację user.config
pliku. Obecnie jest przechowywany z hashem i numerem wersji
%AppData%\[CompanyName]\[ExeName]_Url_[some_hash]\[Version]\
Chcę, aby była agnostyczna w stosunku do wersji aplikacji
%AppData%\[CompanyName]\[ProductName]\
Czy można to zrobić i jak? Jakie są tego konsekwencje? Czy po aktualizacji użytkownik utraci ustawienia z poprzedniej wersji?
%AppData%\[CompanyName]/[ProductName]
których możemy ufać, że pozostaną.Odpowiedzi:
Aby odpowiedzieć na pierwsze pytanie, technicznie rzecz biorąc, możesz umieścić plik w dowolnym miejscu, jednak będziesz musiał go samodzielnie zakodować, ponieważ domyślnym miejscem, do którego trafia plik, jest pierwszy z dwóch przykładów. ( link do instrukcji, jak to zrobić samodzielnie )
Jeśli chodzi o drugie pytanie, zależy to od sposobu wdrożenia aplikacji. Jeśli wdrażasz za pomocą .msi, we właściwościach projektu instalacji (z którego jest zbudowany plik msi) są dwa skróty: „kod aktualizacji” i „kod produktu”. Określają one, w jaki sposób można zainstalować msi i czy aktualizuje, nadpisuje lub instaluje obok dowolnej innej wersji tej samej aplikacji.
Na przykład, jeśli masz dwie wersje oprogramowania i mają one różne kody „uaktualnienia”, to dla systemu Windows są to zupełnie inne programy, niezależnie od nazwy. Jeśli jednak kod „uaktualnienia” jest taki sam, ale kod „produktu” jest inny, to przy próbie zainstalowania drugiego pliku msi zapyta Cię, czy chcesz zaktualizować, w którym to momencie ma skopiować wartości z stara konfiguracja do nowej konfiguracji. Jeśli obie wartości są takie same, a numer wersji się nie zmienił, nowa konfiguracja będzie w tej samej lokalizacji co stara konfiguracja i nie będzie musiała nic robić. Dokumentacja MSDN
ClickOnce jest nieco inny, ponieważ opiera się bardziej na numerze wersji ClickOnce i ścieżce adresu URL, jednak odkryłem, że dopóki będziesz kontynuować „publikowanie” w tej samej lokalizacji, nowa wersja aplikacji będzie nadal używać istniejąca konfiguracja. ( łącze do sposobu obsługi aktualizacji przez ClickOnce )
Wiem również, że istnieje sposób na ręczne scalenie konfiguracji podczas instalacji msi przy użyciu niestandardowych skryptów instalacyjnych, ale nie pamiętam dokładnych kroków, aby to zrobić ... (zobacz ten link, aby dowiedzieć się, jak to zrobić w sieci. config)
źródło
Chciałem dodać ten cytowany tekst jako odniesienie, kiedy będę miał ten problem w przyszłości. Przypuszczalnie można poinstruować infrastrukturę ApplicationSettings, aby skopiować ustawienia z poprzedniej wersji, wywołując Upgrade :
Z posta na blogu z często zadawanymi pytaniami dotyczącymi ustawień klienta : ( archiwum )
Ani przez sekundę nie wierzę, że to faktycznie zadziała - nie ma możliwości, aby Microsoft zapewnił taką możliwość, ale metoda jest taka sama.
źródło
if(CallUpgrade) { Upgrade(); }
stwierdzenia.Properties.Settings.Value
Mam tęProperties.Settings
część, ale czy coś mi brakuje, czy jest to specyficzne dla ciebie?Upgrade
nie działa.Properties.Settings.Default.Upgrade()
Properties.Settings.Default.Save();
po zmianie na false :-)Plik user.config jest przechowywany pod adresem
c:\Documents and Settings>\<username>\[Local Settings\]Application Data\<companyname>\<appdomainname>_<eid>_<hash>\<verison>
<c:\Documents and Settings>
to katalog danych użytkownika, niemobilny (ustawienia lokalne powyżej) lub mobilny.<username>
to nazwa użytkownika.<companyname>
to wartość CompanyNameAttribute, jeśli jest dostępna. W przeciwnym razie zignoruj ten element.<appdomainname>
to AppDomain.CurrentDomain.FriendlyName. Zwykle jest to nazwa domyślna .exe.<eid>
to adres URL, StrongName lub Path, oparte na dowodach dostępnych do haszowania.<hash>
to skrót SHA1 dowodów zebranych z CurrentDomain, w następującej kolejności:1. StrongName
2. URL:
Jeśli żaden z nich nie jest dostępny, użyj ścieżki .exe.
<version>
jest ustawieniem AssemblyVersionAttribute AssemblyInfo.Pełny opis znajduje się tutaj http://msdn.microsoft.com/en-us/library/ms379611.aspx
źródło
(Dodałbym to jako komentarz do odpowiedzi @ Amr, ale nie mam jeszcze wystarczającej liczby przedstawicieli, aby to zrobić.)
Informacji w artykule MSDN jest bardzo jasne i wydaje się nadal obowiązują. Jednak nie wspomina się, że skrót SHA1 jest zapisywany w kodowaniu base 32, a nie bardziej typowym base 16.
Uważam, że używany algorytm jest zaimplementowany w programie
ToBase32StringSuitableForDirName
, który można znaleźć tutaj w źródle odniesienia firmy Microsoft .źródło