nUpdate - Die komfortable Updatelösung

    • Release
    • Open Source

    Es gibt 918 Antworten in diesem Thema. Der letzte Beitrag () ist von TTX.exe.

      Hallo,

      nur mal als Feedback:
      die von Trade bzw. auch von seh genannten Änderungen an den Servereinstellungen haben den gewünschten Erfolg gebracht!
      Hab das Update System schon intensiv getestet und bin echt begeistert!
      Vielen Dank und Grüße dafür!
      Cool, freut mich. :) Dann viel Spaß damit.

      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 :!:
      Kurzes Update, da das ganze ja ziemlich tot scheint:

      Angesichts der Tatsache, dass mein aktuelles Semester jetzt weniger Module erfordert, kann ich wieder mehr Zeit in das Projekt einbringen.

      Ich arbeite grade an der neuesten Version 3.x, die ein paar neue Features, Bugfixes und Verbesserungen enthält. Der Code bleibt zwar trotzdem hässlich, aber funktional.
      Da sich der Aufwand einfach nicht lohnt, den Code neu zu schreiben, lasse ich das auch so und setze den Fokus darauf lieber in Version 4.
      Dort hat sich eh vieles geändert.

      Heute oder morgen wird die neue Version 3 erscheinen.
      Version 4 kommt im Herbst 2019.
      Freue mich schon drauf.

      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

      Trade schrieb:

      und setze den Fokus darauf lieber in Version 4

      Hast du für die Version 4 bereits eine Roadmap?

      Es würde mich interessieren was in der Version 4 anders wird und was bleibt.

      Meine wünsche ;)

      * Option das Installer ohne Adminrechten ausgeführt werden kann (sofern es auch nicht notwendig ist)
      * Die ganze json Uploadgeschichte als Mini-Pluginsystem damit man seine eigene Uploadmethode implementieren könnte.
      * Statistik-Servergeschichte ebenso als art Pluginsystem so das man zum einen entscheiden kann was für ein Server es ist (PHP, ASP.Net, ....) und zum anderen das der Entwickler eigene Werte "Sammeln" kann welche er dann auswerten könnte.
      * Möglichkeit das Updatesystem z.b. in den automatischen Azure DevOps Release Prozess einzubinden.

      Wie schon damals biete ich gerne meine Mitarbeit an sofern gewünscht. Vorallem - ich glaubt mal von dir gehört zu haben das du das AdminTool ja auf WPF umbauen wolltest oder liege ich da falsch?
      Kann gerne Helfen und Ideen mit einbringen. Ab und zu habe ich ja doch einen "Geistesblitz". (die Idee mit der Verteilung damals war ja auch nicht so übel denke ich)

      Schöne Grüße und freue mich das sich hier wieder viel tun wird
      Sascha
      If _work = worktype.hard Then Me.Drink(Coffee)
      Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

      ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

      Hallo,

      Nofear23m schrieb:

      Hast du für die Version 4 bereits eine Roadmap?
      Es gibt einen kleinen Teil dessen, was kommen soll: github.com/ProgTrade/nUpdate#roadmap
      Aber das müsste ich mal noch überarbeiten, da wohl noch mehr dazu kommt. Die komplette Architektur hat sich ja geändert und es soll auch z. B. Unterstützung für mehrere Updateendpunkte geben. Das heißt, man kann diese bspw. auch über GitHub verteilen und nUpdate kann damit dann arbeiten.

      Die ersten beiden Wünsche werden dabei sein. Das Mini-Pluginsystem ist so auch schon im Entwurf. Das kann man beim Statistikserver dann ja ebenso einpflegen. :) Das mit Azure DevOps klingt auch gut. Leider habe ich damit jedoch noch nie gearbeitet und da könnte es sein, dass ich etwas Unterstützung brauchen werde.
      Es ist korrekt, dass das UI in der Administration jetzt mit WPF gemacht wird. Ein Freund bastelt dafür jetzt Controls usw., damit es ein neues Design geben wird. ;) Bei der konkreten Umsetzung darfst Du sehr gerne mithelfen, da Du in WPF besser zugange bist als ich und es dann auch schnell ginge. Also auf Mitarbeit würde ich mich freuen.

      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:

      Das kann man beim Statistikserver dann ja ebenso einpflegen

      Super, das wäre toll. So kann man sowas auch z.b. problemlos in bestehende Website mit einbinden. Top!!

      Trade schrieb:

      Leider habe ich damit jedoch noch nie gearbeitet und da könnte es sein, dass ich etwas Unterstützung brauchen werde.

      Kein problem. Azure DevOps ist ja auch kostenlos (solange man es nicht übertreibt, opensource sowieso) und ich mach sehr, sehr viel darüber.

      Trade schrieb:

      Ein Freund bastelt dafür jetzt Controls usw., damit es ein neues Design geben wird.

      Dafür benötigt es eigene Controls? Das wird interessant!

      Trade schrieb:

      Bei der konkreten Umsetzung darfst Du sehr gerne mithelfen, da Du in WPF besser zugange bist als ich und es dann auch schnell ginge. Also auf Mitarbeit würde ich mich freuen.

      Aber gerne doch. Freue mich schon.

      Grüße
      Sascha
      If _work = worktype.hard Then Me.Drink(Coffee)
      Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

      ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

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

      Die Commits sind schon durch. Ich muss es nur noch testen. Mach ich morgen, weil ich für die Uni noch was machen muss.

      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.4.1

      • Fixed heavy security issue allowing a possible remote code execution
      • Fixed a vulnerability due to an older version of DotNetZip
      • Added windows event log usage to update installer for service applications
      • Fixed a bug that would recognize the app running as service although it is not when installing an update
      • Added the possibility to run operations before replacing files or folders
      • Added the "Replace files/folders" operation to the dialog for package editing
      • Added rollout conditions
      • Added WPF update installer
      • Fixed problems with unhandled exceptions in the update installer
      • Updated all dependencies to the newest version
      • Added Italian as language
      • Improved the code to prevent further bugs
      • Fixed many smaller bugs


      So, endlich das Update. Hat sich nun etwas verzögert, da die Testphase längert gedauert hat als gewollt, weil sich noch einige Fehler aufgetan haben (vor allem im Installer). Diese sind aber nun behoben.
      Es wird unbedingt empfohlen die neue Bibliotheksversion in Verbindung mit der neuen Version der Administration zu nutzen, da sonst ein sicherheitskritisches Problem nicht ausgeschlossen werden kann. Die neuesten Versionen aller Binaries beheben dieses Problem.
      Viel Spaß damit! :) Danke an @Nofear23m für die Implementierung der Rollout Conditions und des WPF Updaters.
      Ich werde heute im Laufe des Tages nochmal ein Update bringen, da ich schon wieder einen kleinen Fehler entdeckt habe. Dieser ist aber gleich behoben.
      #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

      Da hat sich ja einiges getan. Danke @Trade für dieses tolle Projekt. Respekt!

      Da die "Collout Conditions" ja auf meinem Mist gewachsen sind möchte ich ein paar Worte dazu sagen.

      Mit diesen kann bestimmt werden an welchen Kundenkreis das Update ausgerollt werden soll. Das ist praktisch wenn man z.b. nur an BetaTester ausrollen möchte.
      Bearbeitet man die Conditions dann kann man dann den Kreis systematisch erweitern. Auch um den Server (bei größerem Kundenkreis) nicht zu überlasten könnte man so an gewisse Regionen und/oder Kundennummern ausrollen.

      Über die Conditions läst sich aber natürlich auch steuern das alle das Update bekommen sollen bis auf einen gewissen Kreis welcher die Bedingung erfüllt.
      Das ganze ist recht dynamisch gehalten.

      Grüße
      Sascha
      If _work = worktype.hard Then Me.Drink(Coffee)
      Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

      ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

      Also, wenn ich versuche ein Projekt zu erstellen, scheitert es jedesmal an der FTP-Verbindung. Es wird zwar die Datei "updates.json" erstellt, allerdings ohne Inhalt (0 Bytes).

      Anschließend bekomme ich nur den Fehler & nUpdate beendet sich.

      Brainfuck-Quellcode

      1. ---------------------------
      2. Unhandled Exception in nUpdate Administration
      3. ---------------------------
      4. nUpdate Administration has encountered an unhandled error and needs to exit:
      5. Das SafeHandle wurde geschlossen.
      6. bei System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean& success)
      7. bei System.StubHelpers.StubHelpers.SafeHandleAddRef(SafeHandle pHandle, Boolean& success)
      8. bei Microsoft.Win32.Win32Native.SetEvent(SafeWaitHandle handle)
      9. bei System.Threading.EventWaitHandle.Set()
      10. bei System.Net.LazyAsyncResult.Complete(IntPtr userToken)
      11. bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      12. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      13. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
      14. bei System.Net.ContextAwareResult.Complete(IntPtr userToken)
      15. bei System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
      16. bei System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
      17. bei System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
      18. ---------------------------
      19. OK
      20. ---------------------------
      Update auf Version 3.5.0
      • Fixed possible security issue in update installer
      • Added property to choose, if the installer should be run as admin or not
      • Wait for host process to safely exit in update installer
      • Fix possible NullReferenceException

      Man kann jetzt also den UpdateInstaller auch ohne Admin-Rechte starten.

      @FantaZimt Sorry, irgendwie scheint Dein Post untergegangen zu sein. Bei welchem Anbieter hast Du denn Deinen FTP-Server? Dass die updates.json leer ist, ist nicht zwingend ungewöhnlich. Wobei in der Regel schon ein leeres Array drinstehen sollte. Diese Exception ist leider relativ schwierig, weil sie aus der FTP-Library kommt, die ich benutze.

      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 @FantaZimt
      Ich habe ähnliche Probleme beim erstellen eines Updates und auch beim hochladen von Updates selber.
      Bei mir hilft ein Umschalten zwischen IPv4 und IPv6 im nUpdate Administrationtool.
      Zuhause funktionierts nur mit IPv4 und bei mir im Laden nur mit IPv6.
      Keine Ahnung warum, aber vielleicht hilft dir das ja auch.
      Hallo,

      Trade schrieb:


      Man kann jetzt also den UpdateInstaller auch ohne Admin-Rechte starten.


      wo finde ich denn diese Einstellung? Kann dazu weder in der Administration noch im Projektmanager etwas finden. ?(

      Und noch eine Frage.
      Wenn ich es richtig sehe sind die Dateien Newtonsoft.Json.dll, nUpdate.Internal.dll und nUpdate.ProvideTAP.dll geändert wurden im Vergleich zur 3.4.1, welche ich mit meinem Programm ja mitgeben muss.
      Kann ich diese Dateien auch einfach per Update ausliefern? Oder sind die während des Updateprozesses in Benutzung und können nicht überschrieben werden?
      Die Version 3.5 ist jetzt die erste geupdatete Version seit ich den nUpdate einsetze.

      Danke und Gruß

      Achso.... Wieso hat der nUpdater eigentlich keine Update-Funktion? :D
      @Montoyafan Die Eigenschaft heißt UpdateManager.RunInstallerAsAdmin. Diese ist standardmäßig true, um keinen Major-Change auszulösen, da das bisherige Verhalten ja auch so war, immer mit Admin-Rechten starten. Man kann es jetzt eben explizit auf false setzen.

      Die Dateien von nUpdate kannst Du auch in einem Update selber mitliefern, richtig. Das sind ja nur DLLs in Deinem Programm-Verzeichnis. Da ist dann auch nichts in Benutzung, weil der Installer ja separat gestartet wird und Deine Anwendung dann schon beendet ist.

      Wie meinst Du „keine Update-Funktion“?

      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 :!:
      Danke.
      Ich benötige bei meinen Programmen keine Anforderungen an Admin-Rechte, zumindest im Moment.
      So ist das wesentlich einfacher die Programme zu aktualisieren, da diese auf normalen Benutzer-Accounts ohne Admin-Rechte laufen und man so bei jedem Update immer das Admin-Kennwort eingeben musste.

      Trade schrieb:

      Wie meinst Du „keine Update-Funktion“?


      Wäre doch nicht schlecht aus der Administration heraus gleich von 3.4.1 auf 3.5 updaten zu können.

      Gruß
      Achso, das habe ich mal eingefügt gehabt, aber dann wieder rausgenommen. Also in der Administration. Warum genau weiß ich gar nicht mehr. Glaub das lag daran, dass nUpdate damals noch nicht 100% lief.
      Ich kann das mal wieder einbauen, aber mal sehen, wann. Eher in der v4 dann.

      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 :!:
      Schau mal hier: docs.microsoft.com/en-us/dotne…-asynchronous-pattern-tap

      Wenn du mit einem aktuellem .Net Framework programmierst benötigst du nicht die "TAP Variante".

      Grüße
      Sascha
      If _work = worktype.hard Then Me.Drink(Coffee)
      Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

      ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

      Nofear23m schrieb:

      Wenn du mit einem aktuellem .Net Framework programmierst benötigst du nicht die "TAP Variante".
      Nicht ganz. Die TAP-Variante benutzt intern das TAP und die ohne ist rein eventbasiert implementiert. Mit dem aktuellsten Framework braucht er dann nur theoretisch die entsprechenden Dependencies nicht. Das Framework entscheidet aber nicht darüber, ob das TAP-Package gebraucht wird oder nicht.

      @TTX.exe Nutzt Du async-await selbst oder würdest Du eh nur das integrierte UpdaterUI verwenden? Im zweiten Fall kannst Du theoretisch beides installieren, weil das alles intern geregelt wird. Dann reicht auch ohne TAP, weil die zusätzlichen Dependencies brauchst Du dann nicht zwingend.

      Das ganze Zeug mit dem gesplitteten Paket geht mir eh schon seit längerem auf dem Keks, weil es veraltet und schwerer wartbar ist. Daher wird die v4 auch .NET 4.5 als Minimum haben (höhere Versionen je nach Features, die ich brauche) und man braucht die ganzen Zusatzpakete nicht mehr, weil es standardmäßig vorhanden ist (zumal imho eh niemand mehr das EAP benutzen sollte).

      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 :!:
      Hm ok danke erstmal für die Rückmeldungen ^^ .

      Aktuell bin ich noch gar nicht soweit, ich hab ein Projekt erstellt und den FTP / Webserver konfiguriert, dann noch den Code aus dem Clipboard rein kopiert. Nun stellte sich mir erstmal die Frage, welches NuGet Paket nehme ich nun (mag ja keine nutzlosen dlls rumschleppen). Bei UpdateSystem.net war es so, das async nach einem Update gesucht wurde und dann der "Assistent" da angezeigt wurde. Wie das nUpdate nun macht, habe ich noch nicht angeschaut, auch nicht welchen Code ich brauche um die update-suche auszulösen. Ich denke aber schon das ich das async nutzen wollen würde ;) .