nUpdate - Die komfortable Updatelösung

    • Release
    • Open Source

    Es gibt 990 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

      Kleine Zwischenmeldung:

      Ich bin noch nicht fertig mit dem Update, aber es wird auf Grund der Änderungen eine neue Major-Version geben, da inkompatible API-Changes gemacht werden, da ja mehrere Pakete unterstützt werden und die Architektur umgeändert wurde.
      Das ist also fertig, nur muss der Installer das noch verstehen, dass er mehrere Updates machen soll. ;)

      Für Leute, die kein FTP nutzen wollen, sondern z. B. SFTP bietet die Administration bald ein TransferHandler-Interface, das dann via ServiceProvider verwaltet wird. Dass ich keine direkte SFTP-Implementierung habe, liegt daran, dass ich das nicht testen kann (keine Linux-Kenntnisse für einen Server in einer VM).



      Die entsprechenden Klassen werden also dann mitgeliefert, sodass man die Daten verarbeiten und mit diesen Klassen angeben kann, sodass die Administration damit arbeiten kann. Der ​FtpManager wurde also auch stark abstrahiert.

      Alle bekannten Bugs wurden übrigens mittlerweile behoben, jetzt bleiben nur noch Features aus, die ich noch einbauen/fertigstellen muss, und eben der angepasste Installer.

      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 :!:
      Oh ok, das werde ich beheben, danke. Muss man dann halt leider aktuell noch manuell machen.

      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 :!:
      Okay .. was hat dich geritten, als du das gemacht hast? (Nicht böse gemeint)

      Quellcode

      1. nUpdate.Exceptions.NetworkException was unhandled by user code
      2. HResult=-2146233088
      3. Message=Es ist keine Internetverbindung verfügbar.
      4. Source=nUpdate
      5. StackTrace:
      6. bei nUpdate.Updating.UpdateManager.SearchForUpdates() in d:\Documents\Visual Studio 2013\Projects\nUpdate\nUpdate\nUpdate\Updating\UpdateManager.cs:Zeile 259.
      7. bei System.Threading.Tasks.Task.Execute()
      8. InnerException:

      Ja, es ist keine Netzwerkverbindung verfügbar, aber warum MUSS die Anwendung abstürzen, wenn dein Updater keine Internetverbindung findet? Ich würde den Update-Prozess einfach ungefragt beenden oder n Event feuern, nicht aber, sofern die Ausnahme nicht gefangen wird, die Anwendung in den Tod reißen. Für Anwendungen, die produktiv und ernsthaft betrieben werden, ist dies der Tod. Oder wenn du kein Event feuern willst, reagiere darauf, dass einfach kein Update gefunden wurde. So ein Verhalten einer Updater-Bibliothek, die nichts anderes machen soll, als eine Anwendung zu aktualisieren, ohne dabei negativ aufzufallen (durch unnötige Try-Catches).
      Für alles irgendeine Exception werfen ist zwar schön und gut, aber irgendwo muss das auch nachvollziehbar sein .. und hier ist es das eben nicht.
      Weiß nicht, wollte dadurch eben den Updateprozess komplett abwürgen, aber ich habe das jetzt so gehandhabt, dass einfach kein Update gefunden wurde, das ist wohl die sauberste Lösung. Ist also erledigt und wird im Update kommen. Da hast Du aber recht, das war wohl etwas unschön gelöst, wegen sowas habe ich ja z. B. auch bei einem fehlgeschlagenen Statistikeneintrag nur ein Event gefeuert, weil der User da ja nix dafür kann, nur hier eben nicht, das ist aber gut, dass Du es angesprochen hast, danke. ;)

      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 :!:
      Hast Du die Version aus der Assembly laden lassen, oder?

      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 :!:
      Okay, alles klar, ich werde schauen, dass ich das reproduziere und behebe, vielen Dank für die aktive Hilfe!

      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 :!:
      "aktive hilfe" .. ich wollte ein Update für meine Anwendung rausbringen, und treffe dabei auf diverse Fehler ^^
      Übrigens: wenn im Setup-Dialog für den FTP-Pfad die Logindaten nicht richtig sind, und er sich im "Wähle einen Ordner"-Dialog versucht zum FTP-Server zu verbinden, wird die Anwendung nicht mehr nutzbar und kann nur noch durch einen beherzten Schlag durch den TaskManager beendet werden -> Fehler im Dialog abfangen und im Fehlerfall eine Meldung werfen und den Dialog schließen.
      Das sollte eig. nicht sein, was genau passiert da? Friert das ein?

      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 :!:
      Ok, komisch, bei mir kommt direkt das:



      Muss mal schauen, was das sein könnte (evtl. Threadingprobleme o. ä.).

      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 :!:
      Soll "Release Candidate" als Entwicklungsstadium hinzugefügt werden? 12
      1.  
        Ja, das macht Sinn. (11) 92%
      2.  
        Nein, braucht man nicht. (1) 8%
      Da ich wegen disesem Issue (bzw. eher Vorschlag) gerade die UpdateVersion-Klasse überarbeite, bin ich am Überlegen Release Candidates als Entwicklungsstadium hinzuzufügen. Bitte kurz abstimmen, ob das Sinn macht und gemacht werden soll, danke.

      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 :!:
      Wurde implementiert, da die Mehrheit dafür war.
      Es gibt noch einen Bug, wenn UseHiddenSearch aktiviert ist. Wenn beim Suchen der Code schneller ausführt, als die Antwort vom Server kommt, dann deabonniert das UpdaterUi das Event noch bevor dieses feuert. => Keine Updates werden angezeigt. Ich habe das behoben und das Update kommt morgen.

      Edit: Ich werde die Architektur komplett umkrempeln (darunter Umstieg auf async-await).

      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 :!:

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

      Wie sieht es denn mit dem updaten der DLL aus?
      Wenn dann die Multi-Updates kommen muss ich die DLL ja auch updaten damit die Funktion unterstützt wird.

      Was ich noch bemerkt habe:
      Ich würde beim FolderBrowserDialog genauso wie bei dem OpenFileDialog das vorherige Verzeichniss anzeigen lassen. Denn wenn ich mehrere Ordner hinzufügen will muss ich immer mühevoll wieder zum Ordner springen.
      Außerdem wäre toll wenn du zu den Operations noch Move File hinzufügen könntest :)

      Gerade wollte ich ein Update-Paket hochladen und der Server war gerade ein bisschen ausgelastet weshalb der Upload fehlgeschlagen ist. Jedoch wird das Paket einfach gelöscht statt dass es einfach gespeichert wird und man später es hochladen kann. (Wie wenn man bei Publish Update das Häkchen raus nimmt.) Wäre toll wenn du das noch fixen/hinzufügen könntest.

      MfG, KaskadekingDE :)
      KaskadekingDE on GitHub :)
      Bitte keine Fragen über Programmierung per PN! Dafür ist das Forum hier.

      Who cares? ¯\_(ツ)_/¯
      Hallo KaskadekingDE,

      einfach die nUpdate.dll runterladen und dann die alte ersetzen :P
      Ok, werde ich machen. Die Operation kann ich ja einbauen, indem ich Rename File zu Move File mache, steckt ja in System.IO die selbe Methode dahinter.

      Insofern das Paket noch da ist (not released) sollte alles passen, das ist so geplant.
      Ich weiß nicht, ob ich das Update heute schaffe, weil es Probleme mit SynchronizationContext und async-await gibt.

      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 :!: