J'essaye de personnaliser l'emplacement du user.config
fichier. Actuellement, il est stocké avec un hachage et un numéro de version
%AppData%\[CompanyName]\[ExeName]_Url_[some_hash]\[Version]\
Je veux qu'il soit indépendant de la version de l'application
%AppData%\[CompanyName]\[ProductName]\
Est-ce possible de le faire et comment? Quelles sont les implications? L'utilisateur perdra-t-il ses paramètres de la version précédente après la mise à niveau?
%AppData%\[CompanyName]/[ProductName]
là où nous pouvons être sûrs qu'il restera.Réponses:
Pour répondre à la première question, vous pouvez techniquement placer le fichier où vous le souhaitez, mais vous devrez le coder vous-même, car l'emplacement par défaut du fichier est le premier de vos deux exemples. ( lien vers comment le faire vous-même )
Quant à la deuxième question, elle dépend de la façon dont vous déployez l'application. Si vous déployez via un .msi, il y a deux hachages dans les propriétés du projet d'installation (à partir duquel le msi est construit), le «code de mise à niveau» et le «code produit». Celles-ci déterminent comment le msi peut être installé et s'il est mis à niveau, écrasé ou installé à côté de toute autre version de la même application.
Par exemple, si vous avez deux versions de votre logiciel et qu'elles ont des codes de «mise à niveau» différents, alors pour Windows, ce sont des logiciels complètement différents, quel que soit le nom. Cependant, si le code de `` mise à niveau '' est le même, mais que le code `` produit '' est différent, lorsque vous essayez d'installer le 2ème msi, il vous demandera si vous souhaitez mettre à niveau, moment auquel il est censé copier les valeurs du ancienne config vers une nouvelle config. Si les deux valeurs sont identiques et que le numéro de version n'a pas changé, la nouvelle configuration sera au même emplacement que l'ancienne configuration, et elle n'aura rien à faire. Documentation MSDN
ClickOnce est un peu différent, car il est basé davantage sur la version ClickOnce # et le chemin de l'URL, mais j'ai constaté que tant que vous continuez à `` publier '' au même emplacement, la nouvelle version de l'application continuera à utiliser le config existante. ( lien vers la façon dont ClickOnce gère les mises à jour )
Je sais aussi qu'il existe un moyen de fusionner manuellement les configurations lors de l'installation du msi à l'aide de scripts d'installation personnalisés, mais je ne me souviens pas des étapes exactes pour le faire ... (voir ce lien pour savoir comment le faire avec un site Web. config)
la source
Je voulais ajouter ce texte cité comme référence lorsque j'aurai ce problème à l'avenir. On suppose que vous pouvez demander à l'infrastructure ApplicationSettings de copier les paramètres d'une version précédente en appelant Upgrade :
À partir du billet de blog de la FAQ sur les paramètres du client : ( archive )
Je ne crois pas une seconde que cela puisse réellement fonctionner - il n'y a aucun moyen pour Microsoft de fournir cette capacité, mais la méthode est la même.
la source
if(CallUpgrade) { Upgrade(); }
déclaration.Properties.Settings.Value
je laProperties.Settings
partie , mais que je manque quelque chose ou est - ce spécifique à vous?Upgrade
cela ne fonctionne pas.Properties.Settings.Default.Upgrade()
Properties.Settings.Default.Save();
après l'avoir changé en faux :-)Le fichier user.config est stocké dans
c:\Documents and Settings>\<username>\[Local Settings\]Application Data\<companyname>\<appdomainname>_<eid>_<hash>\<verison>
<c:\Documents and Settings>
est le répertoire de données utilisateur, non itinérant (paramètres locaux ci-dessus) ou itinérants.<username>
est le nom d'utilisateur.<companyname>
est la valeur CompanyNameAttribute, si disponible. Sinon, ignorez cet élément.<appdomainname>
est le AppDomain.CurrentDomain.FriendlyName. Cela prend généralement par défaut le nom .exe.<eid>
est l'URL, StrongName ou Path, basé sur les preuves disponibles pour le hachage.<hash>
est un hachage SHA1 de preuves collectées à partir de CurrentDomain, dans l'ordre de préférence suivant:1. StrongName
2. URL:
si aucun de ces éléments n'est disponible, utilisez le chemin .exe.
<version>
est le paramètre AssemblyVersionAttribute de AssemblyInfo.La description complète est ici http://msdn.microsoft.com/en-us/library/ms379611.aspx
la source
(J'ajouterais ceci en commentaire à la réponse de @ Amr, mais je n'ai pas encore assez de représentants pour le faire.)
Les informations contenues dans l'article MSDN sont très claires et semblent toujours s'appliquer. Cependant, il ne mentionne pas que le hachage SHA1 est écrit en base 32 codé, plutôt que la base 16 plus typique.
Je crois que l'algorithme utilisé est implémenté dans
ToBase32StringSuitableForDirName
, qui peut être trouvé ici dans la source de référence Microsoft .la source