4 Stimmen

Auto-Update in Unternehmensumgebungen (C#)

Ich habe eine dreistufige Anwendung, die in Unternehmensumgebungen installiert ist. Bei jeder Aktualisierung der Serverversion müssen auch alle Clients aktualisiert werden. Derzeit biete ich ein MSI-Paket an, das automatisch über Active Directory bereitgestellt wird, aber meine Kunden (meist mit jeweils 20-300 Benutzern) scheinen die MSI-Lösung zu hassen, weil sie

  • Es ist kompliziert, es zum Laufen zu bringen (wenig Active Directory-Kenntnisse);
  • Der Aktualisierungsprozess kann nicht durch den Server ausgelöst werden, wenn eine neue Version erkannt wird;
  • Kunden können nicht mehrere Client-Versionen (z. B. 2.3 und 2.4) gleichzeitig installieren, um mit verschiedenen Servern zu kommunizieren;
  • Der Aktualisierungsprozess selbst funktioniert nicht immer wie erwartet (manchmal heilt das seltsame Verhalten nach ein paar Stunden von selbst)

Ich habe jetzt ein paar Versuche mit ClickOnce gemacht, aber das ist mir zu unflexibel und zu schwer in meinen automatisierten Build-Prozess zu integrieren. Außerdem erzeugt es kryptische Fehlermeldungen, die meine Kunden sicherlich verwirren würden.

Ich hätte keine Probleme damit, die Aktualisierungslogik selbst zu schreiben, aber hier besteht das Problem darin, dass die Benutzer, die selbstaktualisierende Anwendungen ausführen, zu eingeschränkte Rechte haben, um eine Aktualisierung durchzuführen. Ich habe herausgefunden, dass sie in der Lage sind, in ihr lokales Anwendungsdatenverzeichnis zu schreiben, aber ich glaube nicht, dass dies der typische Ort ist, um Anwendungsdateien zu installieren.

Kennen Sie einen Weg zu einem Update, das "einfach funktioniert"?

0 Stimmen

Bitte klären Sie die Fehler, die Sie mit ClickOnce erhalten, und bei welchem Schritt (da es eine gute Lösung für Ihr Problem ist und wir es vielleicht beheben können).

0 Stimmen

ClickOnce hat sich für uns bewährt. Was die "kryptischen" Fehlermeldungen angeht. Ich habe diese nur gesehen, wenn meine Anwendung mit mage falsch konfiguriert wurde.

4voto

Rami Punkte 56

Sie können das, was ClickOnce tut, in gewisser Weise nachahmen, müssen es nur an Ihre Bedürfnisse anpassen.

  1. Erstellen Sie eine leichtgewichtige ausführbare Datei, die ein Netzwerk/einen Internet-Speicherort auf Updates überprüft.
  2. Wenn es Aktualisierungen gibt, kopiert er sie lokal und ersetzt die "echten" Anwendungsdateien.
  3. Sie führt die "echte" Anwendung aus.

Der Speicherort für die Anwendungsdateien sollte sich nach den Berechtigungen und dem Betriebssystem richten. Wenn Benutzer nur Schreibrechte für eine begrenzte Anzahl von Ordnern haben, haben Sie keine andere Wahl, als einen dieser Ordner zu verwenden. Eine andere Möglichkeit ist die Bereitstellung eines Erstinstallationspakets, das die leichtgewichtige ausführbare Datei installiert und Schreibrechte für einen bestimmten Ordner gewährt, z. B. " C:\Program Files \MyApp ". Dieser Ansatz erfordert in der Regel die Zustimmung der IT-Abteilung.

Ich hoffe, das hilft.

2voto

Lex Li Punkte 56075

Es ist wirklich schwer, Ihnen genaue Antworten zu geben, da wichtige Informationen über das clientseitige Installationsprogramm nicht eindeutig sind. Installieren Sie clientseitige Dateien in Programmdateien? Dann könnten Sie Probleme bekommen, wenn die Benutzer eingeschränkt sind.

Sie glauben nicht, dass lokale Anwendungsdaten ein Ordner für die Bereitstellung von Anwendungen sind, Google aber schon. Sein Chrome-Browser wird auf diese Weise unter Windows installiert, und sein automatischer Aktualisierungsprozess ist sogar unbemerkt (was sich vielleicht schrecklich anhört). Warum also nicht Ihre Anwendung in diesem Ordner für eingeschränkte Benutzer bereitstellen? Mehr über den Chrome-Installer finden Sie hier,

http://robmensching.com/blog/archive/2008/09/04/Dissecting-the-Google-Chrome-setup.aspx

2voto

synhershko Punkte 4404

Hier ist eine Open-Source-Lösung, die ich geschrieben habe, um bestimmte Anforderungen zu erfüllen, die wir für WinForms- und WPF-Anwendungen hatten. Die allgemeine Idee ist, die größtmögliche Flexibilität mit dem geringstmöglichen Overhead zu erreichen. Es sollte Ihnen die Flexibilität geben, die Sie für alles, was Sie beschrieben haben, benötigen.

Also, Integration ist supereinfach, und die Bibliothek erledigt so ziemlich alles für Sie, einschließlich der Synchronisierungsvorgänge. Sie ist auch hochflexibel und lässt Sie bestimmen, welche Aufgaben unter welchen Bedingungen ausgeführt werden sollen - Sie stellen die Regeln auf (oder verwenden bereits vorhandene). Nicht zuletzt ist die Unterstützung für alle Aktualisierungen Quelle (Web, BitTorrent, usw.) und jede Einspeiseformat - was auch immer nicht implementiert ist, können Sie einfach für sich selbst schreiben.

Kalte Aktualisierungen (die einen Neustart der Anwendung erfordern) werden ebenfalls unterstützt und automatisch durchgeführt, sofern für die Aufgabe nicht "Hot-Swap" angegeben ist.

Es handelt sich dabei um eine DLL, die weniger als 70kb groß ist.

Weitere Einzelheiten unter http://www.code972.com/blog/2010/08/nappupdate-application-auto-update-framework-for-dotnet/

Der Code ist unter http://github.com/synhershko/NAppUpdate (lizenziert unter der Apache 2.0 Lizenz)

Ich habe vor, es weiter auszubauen, wenn ich etwas mehr Zeit habe, aber ehrlich gesagt sollte man in der Lage sein, es schnell selbst um alles zu erweitern, was es derzeit nicht unterstützt.

0voto

treaschf Punkte 5528

Wenn Sie Ihren Benutzern nicht zu viele Rechte geben wollen, können Sie einen Windows-Dienst schreiben, der auf jedem Computer unter einem Konto mit den entsprechenden Rechten ausgeführt wird und Ihre Anwendung aktualisieren kann, wenn eine neue Version verfügbar ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X