Wir haben eine minimale 'Updater' exe, die eine Remote-URL für Updates prüft, sie herunterlädt und Dateien auf der Festplatte ersetzt, bevor die eigentliche Anwendung gestartet wird. Wenn wir jedoch die Updater-EXE und dann AFAIK ersetzen wollen, haben wir zwei Optionen:Die beste Methode zum Implementieren von Self-Updating-Software
1) Shadow Copying Assemblies wobei .Net eine Schattenkopie der EXE (und aller referenzierten Assemblies) erstellt und diese Assemblys lädt, so dass die Schattenbaugruppen können ersetzt werden und werden beim nächsten Start der Anwendung verwendet.
2) Identifizieren Sie, welche Dateien ersetzt werden, und benennen Sie sie auf der Festplatte um. Windows scheint das Umbenennen/Verschieben von gesperrten Dateien zu erlauben, so dass wir die Dateien verschieben und in die neuen Assemblies kopieren können. Beim nächsten Start der Anwendung werden wir die neuen Baugruppen einführen. Dieser Ansatz wird erwähnt here
Ist diese zweite Methode eine empfohlene Methode? Gibt es Fallen für diesen Ansatz?
Dies ist wahrscheinlich die beste Option, da es helfen sollte, die Sicherheitsstufe Upgrade/Downgrade zu standardisieren erforderlich in Windows Vista und zukünftigen Versionen von Windows –
Wir verwenden ClickOnce für jetzt nicht, da es einfacher war, die beschriebene Dateikopiermethode zu verwenden, und wir haben auch einen angepassten Aktualisierungsprozess für eine SQL-Datenbank, die neben der Anwendung installiert wird. ClickOnce ist jedoch die offizielle Microsoft-Lösung, auf die wir uns mit Blick auf zukünftige Anwendungen konzentrieren werden. Daher wähle ich diese Lösung als akzeptierte Antwort. Vielen Dank. – redcalx
ClickOnce ist ein Albtraum, weil es unflexibel und übermäßig komplex ist, keine starke Microsoft-Unterstützung zu haben scheint und sehr spezifisch für die einzelnen Anwendungsszenarien ist. – jpierson