Kann ich kontrollieren die Lage .Die NETTO-Benutzer-Einstellungen zu vermeiden, dass die Einstellungen auf Anwendung aktualisieren?
Frage
Ich versuche, passen Sie die Position des user.config
Datei.Es ist derzeit gespeicherten hash-version und-Nummer
%AppData%\[CompanyName]\[ExeName]_Url_[some_hash]\[Version]\
Ich will es nicht wissen, die version der Anwendung
%AppData%\[CompanyName]\[ProductName]\
Kann das getan werden, und wie?Was sind die Auswirkungen? Der Benutzer verlieren Ihre Einstellungen aus der vorherigen version nach dem Upgrade?
Lösung
Zur Beantwortung der ersten Frage, Sie technisch können die Datei, wo immer Sie wollen, aber Sie haben, um code es selbst, als Standard stellen Sie die Datei geht, ist die erste der zwei Beispiele.(link zu, wie es selbst zu tun)
Wie für die zweite Frage, es hängt davon ab, wie Sie die Anwendung bereitstellen.Wenn Sie die Bereitstellung über eine .msi, dann gibt es zwei hashes in den Eigenschaften der setup-Projekt (das die msi-Datei wird gebaut), die "upgrade-code" und die "Produkt-code".Diese bestimmen, wie die msi installiert werden kann, und wenn es upgrades überschreibt, oder installiert sich neben anderen version der gleichen Anwendung.
Zum Beispiel, wenn Sie zwei Versionen Ihrer software, und Sie haben die verschiedenen "upgrade" - codes, die dann auf windows, Sie sind völlig verschiedene Teile der software, unabhängig davon, was der name ist.Jedoch wenn das "upgrade" der code ist der gleiche, aber die "Produkt" - code ist anders, als wenn Sie versuchen, installieren Sie die 2. msi werden Sie gefragt, ob Sie ein upgrade durchführen möchten, zu welchem Zeitpunkt es soll, kopieren Sie die Werte aus der alten Konfiguration auf eine neue config.Wenn beide Werte identisch sind, und die Versionsnummer hat sich nicht geändert, dann wird die neue Konfiguration wird in der gleichen Position wie die alte config, und es wird nicht haben, etwas zu tun. MSDN-Dokumentation
ClickOnce ist ein bisschen anders, weil seine auf der Grundlage der aus der ClickOnce-version # und URL-Pfad, aber ich habe gefunden, dass, solange Sie weiterhin zu "Veröffentlichen", um den gleichen Standort die neue version der Anwendung weiter zu verwenden, um die vorhandene config.(link zu, wie die ClickOnce-Griffe updates)
Ich weiß auch, dass es eine Möglichkeit zum manuellen Zusammenführen von Konfigurationen während der Installation des msi mit custom-install-scripts, aber ich erinnere mich nicht an die genauen Schritte, es zu tun...(siehe diese link, wie es zu tun mit einem web.config)
Andere Tipps
Ich wollte diesen zitierten Text als Referenz für hinzufügen, wenn ich dieses Problem in der Zukunft haben. Angeblich können Sie die Application Infrastruktur kopieren Einstellungen von einer früheren Version anweisen, durch den Aufruf Upgrade :
Properties.Settings.Value.Upgrade();
Client-Einstellungen FAQ Blog-Eintrag: ( Archiv )
F: Warum gibt es eine Versionsnummer im user.config Pfad? Wenn ich eine neue Version meiner Anwendung bereitstellen, wird der Benutzer nicht verlieren alle von der vorherigen Version gespeicherten Einstellungen?
A: Es gibt mehrere Gründe, warum die user.config Pfad ist Version empfindlich.
(1) Zur Seite-an-Seite zu unterstützen Einsatz verschiedene Versionen eines Anwendung (Sie können dies tun, mit Clickonce, zum Beispiel). Es ist möglich, dass unterschiedliche Version des Anwendung haben unterschiedliche Einstellungen gespeichert werden.
(2) Wenn Sie ein Upgrade Anwendung kann die Einstellungen Klasse wurde geändert und kann nicht sein, kompatibel mit dem, was gespeichert heraus, was zu Problemen führen kann.
Aber wir haben es einfach gemacht Upgrade-Einstellungen aus einer früheren Version der Anwendung auf dem neueste. rufen Sie einfach an ApplicationSettingsBase.Upgrade () und es werden die Einstellungen aus der abrufen vorherige Version, die das Spiel aktuelle Version der Klasse und speichern sie aus in der aktuellen Version des user.config Datei. Sie haben auch die Option des überwiegenden dieses Verhalten entweder in Ihren Einstellungen Klasse oder in Ihre Provider-Implementierung.
F: Okay, aber wie kann ich wissen, wenn sie Rüsten Sie anrufen?
A: Gute Frage. In Clickonce, wenn installieren Sie eine neue Version Ihres Anwendung Application erkennt es automatisch Upgrade-Einstellungen für Sie an dem Punkt, Einstellungen werden geladen. In nicht-Clickonce Fälle gibt es keine automatische Aktualisierung - Sie rufen müssen, um sich selbst zu aktualisieren. Hier ist eine Idee für die Bestimmung, wann Upgrade zu nennen:
Haben Sie eine boolean Einstellung aufgerufen CallUpgrade und einen Standard geben Wert true. Wenn Ihre Anwendung startet up, können Sie so etwas tun:
if (Properties.Settings.Value.CallUpgrade)
{
Properties.Settings.Value.Upgrade();
Properties.Settings.Value.CallUpgrade = false;
}
Dadurch wird sichergestellt, dass das Upgrade () ist rief nur das erste Mal, das Anwendung läuft nach einer neuen Version bereitgestellt wird.
i für eine zweite nicht glauben, dass es könnte tatsächlich funktionieren -. Es gibt keine Möglichkeit Microsoft diese Fähigkeit zur Verfügung stellen würde, aber die Methode ist es genau das gleiche
Die user.config Datei wird bei
c:\Documents and Settings>\<username>\[Local Settings\]Application Data\<companyname>\<appdomainname>_<eid>_<hash>\<verison>
<c:\Documents and Settings>
ist das Benutzerdatenverzeichnis, entweder nicht-Roaming (Lokale Einstellungen oben) oder Roaming.
<username>
ist der Benutzername.
<companyname>
ist der CompanyNameAttribute Wert, falls vorhanden. Andernfalls ignoriert dieses Element.
<appdomainname>
ist die AppDomain.CurrentDomain.FriendlyName. Diese in der Regel standardmäßig auf den Exe-Namen.
<eid>
ist die URL, Strong oder Pfad, auf der Grundlage der zur Verfügung stehenden Beweismittel Hash.
<hash>
ist eine SHA1-Hash von Beweismittel aus dem Current, in der folgenden Reihenfolge der Präferenz gesammelt:
1. Strong
2. URL:
Wenn beides nicht vorhanden ist, verwenden Sie die EXE-Pfad.
<version>
ist die Assembly der Assembly Einstellung.
Ausführliche Beschreibung ist hier http://msdn.microsoft.com/en-us/library /ms379611.aspx
(ich würde hinzufügen, dies als Kommentar zu @ Amr Antwort, aber ich habe nicht genug rep, dass noch zu tun.)
Die Info im MSDN-Artikel ist sehr klar und scheint gelten weiterhin. Allerdings scheitert es zu erwähnen, dass die SHA1-Hash Basis geschrieben 32 codiert, anstatt die typische Basis 16.
Ich glaube, dass der Algorithmus verwendet wird, in ToBase32StringSuitableForDirName
implementiert, die href="http://referencesource.microsoft.com/#System.Configuration/System/Configuration/ClientConfigPaths.cs" rel="nofollow"> .