nUpdate - Die komfortable Updatelösung

    • Release
    • Open Source

    Es gibt 989 Antworten in diesem Thema. Der letzte Beitrag () ist von Archangel.

      Hallo,

      also der Fehler wird ausgelöst durch ein anderes Problem, da hier die Fail-Methode aufgerufen wird. Dass dann das Invoken nicht klappt, ist ein anderes Problem. Grundsätzlich basiert es jedoch auf dem vorherigen Fehler. Das Problem scheint beim Kopieren der entpackten Dateien aufzutreten. Da der Installer dann abstürzt, werden die Dateien nicht mehr ordnungsgemäß gelöscht, wodurch Du dann die andere Warnung erhältst.
      Es gilt rauszufinden, wo genau der Fehler herkommt bzw. was diesen verursacht. Multithreading ist dabei halt immer etwas schwierig.

      Scheint wohl ein dateispezifisches Problem zu sein, wenn Du sagst, es tritt nur manchmal auf.
      Es kommen zwei Stellen in Frage: github.com/ProgTrade/nUpdate/b…Installer/Updater.cs#L512 und github.com/ProgTrade/nUpdate/b…Installer/Updater.cs#L531.
      Vielleicht ist die jeweilige Datei also aktuell durch einen Prozess blockiert, was dann zu einem Fehler führt. Ist aber unwahrscheinlich, da das bisher immer korrekt funktioniert hat. Daher tippe ich mal auf eine anderweitige IOException, die dann durch das Rethrowing im unteren Teil behandelt wird. Alles andere sollte eigentlich problemlos klappen und keine Exception werfen. Tritt der Fehler direkt auf oder erst nachdem einige Dateien entpackt wurden?

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Entschuldige die verspätete Antwort. In meinem Fall wurde immer nur eine Datei ersetzt (die main.exe), insofern vermute ich, dass der Fehler direkt nach der ersten Datei abstürzt? Oder werden in der Zip noch mehrere nUpdate spezifische Dateien mitgeliefert?

      Vielen Dank fürs Anschauen, und wenn ich irgendwie behilflich sein kann, sag gerne Bescheid!

      Mitch
      Okay, das ist schon mal gut zu wissen. Nein, sonst werden keine Dateien mitgeliefert.
      Ich schicke Dir morgen mal eine Debug-Version, die Du dann mal probieren solltest, um mir dann die Logs zu geben. Dann kann ich die Exception mal nachforschen.
      Muss eh noch eine neue Version veröffentlichen, da noch ein anderer Fehler existiert in nUpdate Administration. Ich bin am Wochenende in Frankfurt. Vielleicht kann ich dann im Hotel dran arbeiten.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Update auf Version 3.3.0

      • Fixed a possible IOException in the update installer
      • Fixed a bug where package architectures were not filtered correctly
      • Added a search timeout property
      • Added the possibility to use a dynamic URI for the update packages
      • Fixed a possible InvalidOperationException in the ProjectEditDialog

      Nach langer Zeit mal wieder ein Update. :) Download wie immer im Startpost.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Update auf Version 3.3.1

      • Fixed a bug that caused that nUpdate UpdateInstaller did not install any updates

      Wichtiges Bugfix-Update. Der UpdateInstaller war in der letzten Version fehlerhaft und hat nicht funktioniert.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Hallo,

      ja, es wird noch Updates geben. Hab vor kurzer Zeit nochmal einiges getan. Das Update für v3 dauert noch etwas, da ich da unbedingt noch ein spezielles Feature einbauen will, dass aber bisher noch nicht angetastet wurde. Allgemein hab ich grad wieder weniger Zeit.

      In v4 ist nUpdate dann .NET Standard (2) basiert, also wird auch mit Xamarin laufen.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

      Trade schrieb:

      also wird auch mit Xamarin laufen.
      Und wie genau soll das auf Xamarin Funktionieren? Hast du einen Konkreten Plan für die Verteilung und installation der Pakete unter Android, iOS und UWP (auch Windows S)? Android, und UWP (Nicht Windows S) kann ich mir noch vorstellen, aber die anderen beiden?
      Das ist natürlich dann die Frage. Konkreten Plan habe ich da noch keinen. ^^

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Ich hätte vier wesentliche Vorschläge:

      - Feature Toggles
      - Staging/Role-Out/Gezielte Auslieferung (auch bei Feature Toggles)
      - Server gestützte Prüfung mittels HTTPS und optionale externe Dateispeicherung
      - Generell eine WebAPI (am besten ASP.NET Core für Cross Platform) verwenden (Einbinden in CI/CD)

      Eventuell würde ich dies bzgl. auch ein paar Pull Requests machen. Wobei ich nicht weiß inwiefern das der gedachten Zukunft deines Projekts entspricht... :)

      VG,
      Julian
      Hmkay. :|
      PullRequests sind jederzeit willkommen. :)

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

      Trade schrieb:

      PullRequests sind jederzeit willkommen. :)


      Ich denke, die bisherige Architektur und Vorgehensweise zu verändern ist aufwendiger als diese auch neu zu entwickeln, wobei natürlich Vorgehensweisen und Prozessmuster übernommen werden können. Lediglich der Rahmen und die Komponenten sollten neu gemacht werden. Zudem wäre der .NET Standard als Basis für den Kern einfacher verwendbar. Inwiefern würdest du an einem solchen Projekt mitwirken wollen?
      Hmkay. :|
      Ich denke, man sollte daher dort im Branch für v4 arbeiten. Für die v3 lohnt sich der Aufwand eher nicht mehr. Sind dann ja vmtl. eh auch Major Changes dabei.

      Dieses Semester wird es eher schwierig noch. Aber ab Ende Februar könnt ich dann auch wieder Zeit investieren.
      Dann könnte man sich mal überlegen, wie das alles aussehen soll und dann ne Architektur hochziehen.
      Eine WebAPI sollte auf jeden Fall noch her. Man kann sowas immer auch mal ausweiten dann auf ne Remote Administration über den Browser z. B. oder dann eben Cross Platform.
      Wichtig ist mit halt trotzdem, den Kern so zu belassen, dass man das alles dazu bekommt und sich gleichzeitig für die Nutzung nicht all zu viel schwieriger gestaltet.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Kannst Du vielleicht noch kurz erklären, wie Du Dir welche Kategorie vorstellst und auch jew. die einzelnen Punkte? Also manches ist ja selbsterklärend, aber sowas wie Feature Toggles oder so wäre ganz gut erklärt zu haben.
      Ist es möglich, diese Projektboards in einen PullRequest zu packen oder kann ich die nur selber hinzufügen?

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Kategorie? Meinst du die Spaltennamen? Also Brainstorming sind alle Ideen. Discussable sind Dinge deren Funktionsumfang noch nicht klar ist und/oder dessen genaue Definition nicht bekannt sind. Considering sind Dinge deren Platz in der Architektur noch geklärt werden muss und mit welchen Funktionen genau bei der Implementierung begonnen werden sollte. Passing sind Dinge, die auf jeden Fall fester Bestandteil der Architektur werden sollte.

      Feature toggles: Eher weniger Bestandteil eines Update Systems. Es gibt verschiedene Arten von Feature Toggles. Zeitgesteuerte und servergesteuerte (ähnlich updates auch roll-out-mäßig) Aktivierung der Features. Möglich sind auch lokale Preview Funktionen eines Features. Mittels Feature-Toggles kannst du Features im Code bereits existent haben. Feature Toggles steuern, ob dieses Feature für den Nutzer benutzbar ist. Es wäre cool in der Administration des Updatesystems von einer Anwendung auch das Ein- und Ausschalten von bestimmten Funktionen steuern. Hoffe das ist einigermaßen verständlich. Wird viel im Bereich CI/CD verwendet. Eine evtl. bessere Erklärung findest du hier: martinfowler.com/articles/feature-toggles.html

      Außerdem kurz erklärt:
      - Selective updates: Der Server wählt gezielt Clients aus die bestimmte Updates erhalten/nicht erhalten.
      - Light mode: Hier ist die Administration wie bisher eine UI auf dem Rechner eines Entwicklers bzw. eine die nicht alle Funktionen unterstützt. Beide steuern einen FTP/HTTP-Server an, der alles über statische Dateien regelt. Selektive Updates seitens Server funktionieren dann nicht. So ist das Updatesystem auch dann verwendbar, wenn kein 24/7 laufender Windows/Linux-Server läuft, der die API hostet.
      - CI/CD: Der Release von Updates auf eine automatisierte Art und Weise. Besonders nützlich sind hier Feature Toggles.
      - Download/external CDN: Optional nur die Speicherung eines Download-Links für die entsprechende Version. Damit der Updateserver bzw. die API, die alles steuert nicht auch noch die Dateitransfers übernehmen muss.
      - Update-Strategien: Fehlerraten abgleichen und Update-Roll-Out anpassen. Gibt noch viel mehr. Wenn man das entsprechend abstrahiert kann man da ne Wissenschaft draus machen...

      Nein, soweit ich weiß sind diese Projektboards nicht mittels PR oder ähnliches transferierbar.

      Hoffe das war verständlich. Das Aufschreiben von sowas ist immer sehr schwierig für mich.

      VG :D
      Hmkay. :|
      Okay, alles klar. Genau das meinte ich. Klingt interessant. Ein paar Sachen sind ja grundsätzlich schon umgesetzt, aber das kann natürlich noch erweitert und verbessert werden. Ich hab halt jetzt u.a. nicht so die Erfahrung mit CI/CD z.B., daher müsste man da erst schauen, wie das alles aussehen soll.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: