2010-05-20 2 views
19

Ich habe eine ClickOnce Anwendung, die alle alten Versionen auf meiner Festplatte verlassen. Es handelt sich um eine interne Unternehmensanwendung, die häufig aktualisiert wird. Dies ist ein Desaster für das schnelle Aufblasen unserer Backup-Größe.ClickOnce Deployment ist mehrere Versionen (ja, mehr als zwei)

Gemäß der Dokumentation und anderen Stack   Überlauf Fragen, es soll nur die aktuellen und früheren Versionen auf der Festplatte verlassen. Jedes Mal, wenn ich das Projekt bereitstellen und einen Client aktualisieren, erhalte ich jedoch eine weitere Kopie aller EXE-, DLL- und Datendateien. Ich mache keinerlei Änderungen an der Anwendung, sondern schiebe die Bereitstellung in Visual Studio einfach weiter.

Wie behebe ich dieses Problem?

Das Problem scheint auf Windows 7 und Windows XP sowie 64-Bit- und 32-Bit-Windows zu passieren.

Ich habe ein diff des Ordners durchgeführt, wo die Version installiert ist und die folgenden Dateien sind unterschiedlich:

MyApp.exe.manifest 
MyApp.exe.cdf-ms 
MyDll1.cdf-ms 
MyDll2.cdf-ms 

keine aktuellen ausführbaren Dateien unterschiedlich sind, noch die MyApp.manifest, MyDll1.manifest usw.

Wie wäre es mit einer Alternative? Ist es sicher, zur Laufzeit nach anderen Ordnern zu suchen, die meine Anwendung enthalten, und diese zu löschen? Wird das irgendwas brechen?

Ist ClickOnce nur eine scheinbar mysteriöse Black Box?

+0

Um klar zu sein, meinen Sie, dass alle alten Versionen auf dem * Client * Rechner gespeichert bleiben? Alle Versionen sollten so lange im * Bereitstellungsverzeichnis * verbleiben, bis Sie sie löschen, da Sie möglicherweise jeweils unterschiedliche Benutzer in verschiedenen Versionen haben. – Jay

+0

Ja, auf dem Client-Computer, in den Benutzerordnern begraben – Clyde

+0

Macht es einen Unterschied, wenn Sie in Ihren Veröffentlichungseinstellungen eine mindestens erforderliche Versionsnummer angeben? – Jay

Antwort

6

Ich denke, ich habe das tatsächlich herausgefunden. Für einige unbekannte (und inakzeptable, ehrlich gesagt) Gründe wird die Bereinigung älterer Versionen nicht passieren, wenn die neuere Version läuft - sie schlägt einfach stillschweigend fehl.

Die Bereinigung wird ausgeführt, wenn die alte Version beendet wird. Da die App jedoch neu gestartet wurde, wird die neue Version bereits gestartet und blockiert die Bereinigung.

Beachten Sie auch, dass der "Scavenger-Service", der in anderen Antworten erwähnt wird, eine totale Fabrikation zu sein scheint. Ich habe keine Dokumentation eines solchen Dienstes gefunden, noch irgendwelche Beweise dafür, dass es läuft. Die Bereinigung scheint inline als Teil des Clickonce-Aktualisierungsprozesses zu erfolgen.

+0

Wir begegnen dem gleichen Problem mit unserer Unternehmensanwendung. Unsere App wird im Code mit 'ApplicationDeployment.CurrentDeployment.Update()' aktualisiert. Kein Neustart, nachdem das Update das Problem nicht gelöst hat, ältere Versionen bleiben auf dem Datenträger. Haben Sie das Problem gelöst? – Niki

0

Sie überprüfen es sofort? Sie gehen nicht einmal nach einem Tag oder so weg? Der ClickOnce Scavenger-Dienst soll die alten Versionen entfernen und entfernen. Wenn Sie die neueste Version als erforderliches Update verwenden, werden die anderen Versionen entfernt? (Legen Sie dazu die erforderliche Mindestversion im Dialogfeld Updates auf dieselbe Version fest, die Sie bereitstellen).

+0

Die minimal erforderliche Version tut nichts. Gibt es eine Möglichkeit, diesen Dienst "ClickOnce Scavenger" sofort auszuführen? Gibt es Unterlagen zu diesem Scavenger-Service?Ich habe noch nie davon gehört – Clyde

+0

Darüber hinaus habe ich eine neue Windows Forms App erstellt und mit einem Klick bereitgestellt und es hat sich korrekt verhalten, so dass nur zwei Versionen übrig geblieben sind. Es gibt also etwas an meiner realen App, das anders ist, aber ich kann keinen Unterschied in ihrer Veröffentlichungskonfiguration finden. – Clyde

+0

Und ja, sie sind immer noch einen Tag später da – Clyde

1

Der Scavenger-Service ist Teil der ClickOnce-Engine; Es läuft automatisch, und Sie können nicht direkt darauf zugreifen. Es sollte vorbeikommen und die alten Versionen aufräumen.

Frage zur min-Version. Wenn Sie die neue Version & bereitstellen, legen Sie die erforderliche Mindestversion auf die neue Version # fest, wird die App auf diese Version aktualisiert? Dann lässt die ehemalige (n) auf der Festplatte?

Gibt es ein Muster, das Sie sehen können? Ist die Anzahl der zwischengespeicherten Bereitstellungen begrenzt?

Es gibt auch etwas über Schattenordner, die die Ränder meines Gedächtnisses kitzeln; Die Dateien sind nicht wirklich da. Ich werde ein wenig recherchieren und meine Notizen durchsehen und sehen, was ich finden kann.

Welche Art von App ist das? WinForms/WPF/VSTO?

Wenn Sie sagen, dass es Ordner zwischenspeichert, welcher Ordner ist es? Für eine Winforms-App gibt es beispielsweise zwei Ordner, die für jede Version erstellt werden (xxxxtion ... und xxxxe ... oder so ähnlich) und eine Reihe von Ordnern - einen für jede in der Bereitstellung enthaltene Assembly - zwischengespeicherte Versionen der Assemblys, damit sie nicht jedes Mal heruntergeladen werden müssen, wenn sie sich nicht geändert haben. Sind es die xxxxtion- und xxxxexe-Ordner, aus denen Sie mehrere sehen?

+0

Es ist eine Winforms-App und verfügt über die beiden Arten von Ordnern, die Sie beschrieben haben. Es gibt nur zwei "exe" -Ordner, und sie enthalten das Anwendungssymbol, die Konfigurationsdatei und eine chm-Hilfedatei, die ich als Anwendungsinhalt beigefügt habe. Es sind die Ordner "tion", die endlos dupliziert werden. Jeder einzelne enthält die exe, alle dlls, PLUS die Dateien, die im "exe" -Ordner waren, einschließlich der 10-Megabyte-chm-Datei. – Clyde

+0

Ich weiß nicht, ob es wichtig ist, aber ich habe nicht die App Auto-Check-Version beim Start - das ist in Code mit ApplicationDeployment.CurrentDeployment.CheckForDetailedUpdate und dann ApplicationDeployment.CurrentDeployment.Update() – Clyde

+0

haben Sie versucht, es zu ändern um automatisch zu aktualisieren und zu sehen, ob es die Dateien löscht? – RobinDotNet

-1

How to Delete

Clear Click-Once (versioning) Cache

Aus der Dokumentation:

Clickonce-Anwendungen, die online gehostet werden, sind in der Menge an Speicherplatz beschränkt sie durch eine Quote besetzen können, die die Größe des Clickonce-Cache beschränkt. Die Cachegröße gilt für alle Online-Anwendungen des Benutzers. Eine einzelne, teilweise vertrauenswürdige Online-Anwendung ist auf die Hälfte des Kontingentbereichs beschränkt. Installierte Anwendungen sind nicht durch die Cachegröße beschränkt und zählen nicht zum Cache-Limit. Bei allen ClickOnce-Anwendungen behält der Cache nur die aktuelle Version und die zuvor installierte Version bei. Standardmäßig verfügen Clientcomputer über 250 MB Speicherplatz für Online-ClickOnce-Anwendungen. Datendateien zählen nicht zu diesem Limit. Ein Systemadministrator kann dieses Kontingent auf einem bestimmten Clientcomputer vergrößern oder verkleinern, indem er den Registrierungsschlüssel HKEY_CURRENT_USER \ Software \ Classes \ Software \ Microsoft \ Windows \ CurrentVersion \ Deployment \ OnlineAppQuotaInKB ändert. Dies ist ein DWORD-Wert, der die Cachegröße in Kilobyte angibt . Um zum Beispiel die Cachegröße auf 50 MB zu reduzieren, würden Sie diesen Wert auf 51200 ändern.

+1

Ich glaube, Sie haben die Dokumente falsch interpretiert - dieses Cache-Limit ist das Gesamtlimit für alle Click-Once-Anwendungen auf dem Computer. Für eine einzelne Anwendung "behält der Cache nur die aktuelle Version und die zuvor installierte Version" http://msdn.microsoft.com/en-us/library/267k390a(v=VS.100).aspx – Clyde

0

Ich weiß, diese Frage ist ein bisschen alt, aber wir hatten dieses Problem vor kurzem, und ich bin mir auch nicht sicher über die Ursache. Scheint nur manchmal und für einige Benutzer zu passieren.

Wir haben versucht, Code zu implementieren, der bestimmte alte Ordner im Verzeichnis ..\Apps\2.0 teilweise löscht. Wenn wir jedoch auf eine frühere Version zurückwechseln, wenn der vorherige Versionsordner vorhanden ist, aber von unserem Code gelöscht wurde, funktioniert ClickOnce nicht Überprüfen Sie, ob es gelöscht wurde und laden Sie es erneut herunter. Stattdessen wird davon ausgegangen, dass es immer noch vorhanden ist. Anschließend wird die Installation beschädigt und die IT muss manuell für jeden Benutzer neu installiert werden, bevor sie die App erneut verwenden können! Schrecklich, wenn Sie 50 plus Benutzer haben.

Wenn jemand eine Möglichkeit kennt, ClickOnce zu zwingen, alle Dateiabhängigkeiten erneut vor/nach der Aktualisierung erneut zu laden, würde ich gerne wissen!

Verwandte Themen