Kann ich kontrollieren die Lage .Die NETTO-Benutzer-Einstellungen zu vermeiden, dass die Einstellungen auf Anwendung aktualisieren?

StackOverflow https://stackoverflow.com/questions/621265

  •  05-07-2019
  •  | 
  •  

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?

War es hilfreich?

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

gespeichert

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"> .

scroll top