2012-03-28 6 views
2

Unser Code-Signing-Zertifikat ist kürzlich abgelaufen, also habe ich es erneuert und gerade unsere erste Version veröffentlicht, die das neue Zertifikat verwendet. Leider verliert jeder Kunde, der das Upgrade installiert, die anwendungsspezifischen Anwendungseinstellungen und die Standardwerte werden zurückgesetzt. Ich bin mir ziemlich sicher, dass andere Upgrades immer die Benutzereinstellungen von der vorherigen Version kopiert haben, also würde ich vermuten, dass es ein Problem mit dem neuen Zertifikat gibt. Wir verwenden ein erworbenes Zertifikat, kein Testzertifikat. Unsere Anwendung ist eine WinForms-Anwendung, die auf .NET 3.5 abzielt. Die Zertifizierungsstelle scheint in den drei Jahren seit dem Kauf des ersten Zertifikats den Besitzer gewechselt zu haben, so dass die Emittentenfelder unterschiedlich sind.Benutzereinstellungen, die während des ClickOnce-Upgrades verloren gegangen sind, nachdem ich unser Codesignaturzertifikat erneuert

Gibt es eine Möglichkeit, die Benutzereinstellungen bei der Erneuerung eines Codesignaturzertifikats nicht zu verlieren?

Antwort

4

Dank einiger Hinweise von Jirka's answer stellte sich heraus, dass es sich um eine ziemlich einfache Lösung handelte. Es sieht so aus, als ob das Framework für Benutzereinstellungen die vorherige Version sehen kann, aber sie wurde aus irgendeinem Grund nicht aktualisiert. Ich habe Mitch's technique for upgrading user settings verwendet, um Upgrade() das erste Mal manuell aufzurufen, das ich eine neue Version laufe. Ein nützlicher Trick, um diesen Upgrade-Prozess mehrmals zu testen, war Jason's suggestion des Kopierens alter Versionen des Anwendungsmanifests über die aktuelle Version.

Es sieht so aus, als hätte ich Glück gehabt. In einigen Szenarios müssen Kunden vollständig deinstallieren und neu installieren, wenn Sie Ihr Zertifikat erneuern.

RobinDotNet schrieb eine comprehensive article on certificate expiration and ClickOnce. Ich habe festgestellt, dass es a bug report gibt, aber es klingt nicht sehr wahrscheinlich, dass es behoben wird. Es klingt, als würde das Targeting von .NET 4.0 dieses Problem beseitigen, aber der Übergang von 3.5 zu 4.0 kann a bit tricky sein.

Eine Sache, die den Ablauf etwas glatter machen kann, ist das Timestamping der Signierung. Auf diese Weise müssen Sie Ihr Zertifikat nicht erneuern und eine neue Version veröffentlichen, bevor das alte Zertifikat abläuft. Die einzige Zeitstempel-Server-URL ich erwähne gesehen habe, ist dies:

http://timestamp.verisign.com/scripts/timstamp.dll

1

wir auf Anwendungseinstellungen ersten und Besonderheiten auf Benutzereinstellungen erhalten ein Upgrade im Zusammenhang durch einige gotchas gehen lassen dauern.

Der Artikel, den Sie mit verknüpfen, sagt, dass Sie OK sind (bt bare Aufrüstbarkeit), solange Sie keine VSTO 2010-Anwendung sind. Wenn Sie dies tun, ist das Retargeting auf .NET 4.0 immer noch eine ziemlich triviale Aufgabe unter einer Voraussetzung: Sie müssen .NET 4.0 auf den Systemen Ihrer Kunden verfügbar haben. Wenn dies nicht der Fall ist, gräben Sie die E-Mail aus, die Sie an dem Tag gesendet haben, an dem Sie Ihre Anwendung (mit der zu installierenden URL) eingeführt haben, und verteilen Sie sie erneut. Diese Methode wird sie mit .NET 4 ausstatten (aber das Starten der Anwendung wie üblich ist es nicht).

ClickOnce erfordert zusätzlich Ihre Identität (Subject - CN-Teil) zu den gleichen auf beiden Zertifikaten, alt und neu zu erkennen, dass es immer noch die gleiche Anwendung ist. Ist das der Fall? Grabe Dich genau in das Thema Detail ein.

Wenn alles fehlschlägt, besteht Ihre letzte Chance in Bezug auf die Anwendungseinstellungen darin, app.exe.config zu manipulieren, wodurch die App-Einstellungen programmgesteuert in Ihrer App gespeichert werden. Wenn Sie die Zugriffsrechte dafür auf den Systemen Ihrer Kunden haben.

User settings upgrade is slightly more complicated by design. Der Grund ist, dass ClickOnce eine Zusammenführung der Standardeinstellungen der neuen Version mit bestimmten Benutzereinstellungen unter der alten Version versucht. Es ist jedoch möglich, diese Logik durch Überschreiben ApplicationSettingsBase.Upgrade anzupassen.

+0

Danke für die Vorschläge. Ich spreche über benutzerspezifische Anwendungseinstellungen, also habe ich das in der Frage geklärt. Ich habe das Feld Betreff in den alten und neuen Zertifikaten überprüft, und es gibt keine Änderung. Das Feld Betreffschlüssel-ID stimmt jedoch nicht überein. Die beiden Zertifikate stammen von verschiedenen Behörden, daher generieren sie die Kennungen möglicherweise anders. –

+0

Geänderte Betreff-Schlüssel-ID ist kein Problem. Dies wird sich voraussichtlich ändern. Sie haben eine gewisse Kontrolle über das Upgrade der Benutzereinstellungen. Erstellen Sie eine Klasse für Anwendungseinstellungen, überschreiben Sie 'ApplicationSettingsBase.Upgrade' und rufen Sie' ApplicationSettingsBase.GetPreviousVersion' daraus auf. Siehst du die alten Benutzereinstellungen auf diese Weise? Wenn dies der Fall ist, werden Sie von keinem der Fehler, die Sie derzeit fürchten, betroffen sein (.NET hält dies für die gleiche Anwendung, Glück für Sie). –

+0

Glücklicherweise für mich. Wie Sie vorgeschlagen haben, konnte ich Einstellungen aus der vorherigen Version sehen, als ich 'GetPreviousVersion()' aufgerufen habe. Ich musste 'Upgrade()' nicht einmal überschreiben, es funktioniert, wenn ich es explizit anrufe. Ich frage mich, warum die ClickOnce-Bereitstellung "Upgrade()" nicht ordnungsgemäß aufruft. –