nUpdate - Die komfortable Updatelösung

    • Release
    • Open Source

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

      Trade schrieb:

      Also diese Fehler sind eigentlich nicht reproduzierbar. Ich hatte sie nur mal auf meinem PC, der schon 6 Jahre alt ist und nicht mehr so extrem leistungsstark war mit Windows 7 zusammen. Ansonsten müsste das relativ flüssig laufen.

      Lag wohl an einem BrowserGame das ich offen hatte. Trotzdem komisch das man das nur bei nUpdate gesehen hat. Bei meinen anderen Anwendungen kein geflacker. PC ist I7 4770K mit 16GB und GTX680 also hoffentlich nicht das Problem ;)

      Trade schrieb:

      Dass man die Fenster nicht vergrößern kann, ist ja Absicht. Ich könnte mir beim besten Willen nicht vorstellen, wie man da die Anchor etc. setzen sollte... Höchstens noch beim ProjectDialog, aber selbst da würde das dann bei der Overview zu einem komischen Aussehen führen. So schlimm ist das doch nicht, oder?

      Dann ist vielleicht das Grunddesign ein Problem? ^^ Mir geht es primär um die Höhe die ich anpassen können muss damit ich nicht vertikal scrollen muss.

      Trade schrieb:

      In der Registry? Wird zwar nicht direkt supported, lässt sich aber über die Operationen einrichten.

      Nein. Ich meine anhand des Upgrade-Keys der von MSI benutzt wird. Der wird leider nicht direkt abgespeichert sondern man muss anhand des Upgrade-Keys den Product Key auslesen und dann da in der Registry die Version ändern. Könnte aber eventuell mit einem C# Script machbar sein. Leider unverzichtbar wenn man ein Setup nutzt. Sonst bleibt nur ein Updater der schlicht die Setups läd und ausführt.

      Ich werde das ganze mal ausgiebig testen und schauen ob alles was ich mir vorstelle möglich ist.
      In jedem Fall danke für die Arbeit die in das Tool fließt!
      Hallo,

      das kommt drauf an. Bei der Klasse ​UpdaterUI sind alle Abläufe automatisch schon integriert und Du musst nur noch ​ShowUserInterface aufrufen. Wenn Du ein eigenes UI nutzen möchtest, musst Du das selber machen. Da stellt Dir der ​UpdateManager dann alles bereit. Der wird im ​UpdaterUI intern auch benutzt und somit könnte man sich das da anschauen, wie es implementiert ist.
      Meintest Du das?

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

      ich meine Allgemein deine Libary nUpdate oder dein Programm nUpdate.
      Das intigriere ich ja bei mir im Projekt damit ich mein Projekt sicher updaten kann.

      Nun erstellst du von nUpdate eine neue Version. Muss ich deine neue Version bei mir im Projekt dann selber Updaten und dem User übergeben ?

      Mfg
      Grüße , xChRoNiKx

      Nützliche Links:
      Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
      Achso, so meinst Du. Das musst Du natürlich selber machen, da Du als Entwickler für die eingebundenen Biblioheken und deren Versionen selbst verantwortlich bist.
      Wenn Du nUpdate über NuGet installierst, ist das Updaten jedoch 'ne echt bequeme Sache und kein Problem mehr.

      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 :!:
      Das TransferInterface ist nun auch auf NuGet verfügbar:



      @Thunderbolt schraubt wegen eines privaten Projekts, in dem er nUpdate nutzt, gerade an einem TransferProvider für SFTP herum und wenn der demnächst fertig wird, wird er ihn auch bereitstellen.
      Vermutlich werde ich vorher jedoch nochmal ein winziges Update veröffentlichen, damit das etwas komfortabler wird und auch die Handler so konfiguriert werden können (u. a. wegen SSH-Keys).
      Da er jedoch zeitlich etwas begrenzt ist, kann das noch ein kleines bisschen nach hinten rutschen, bis Ihr das dann laden könnt.



      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 einen genauen StackTrace?

      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 :!:
      Jede Exception gibt Dir das aus... Hier unter "Details anzeigen" und dann StackTrace suchen.

      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 :!:
      Spoiler anzeigen
      System.InvalidOperationException ist aufgetreten.
      HResult=-2146233079
      Message=Die Sequenz enthält kein übereinstimmendes Element.
      Source=System.Core
      StackTrace:
      bei System.Linq.Enumerable.First[TSource](IEnumerable`1 source, Func`2 predicate)
      bei nUpdate.Updating.UpdaterUI..ctor(UpdateManager updateManager, SynchronizationContext context, Boolean useHiddenSearch) in c:\Users\Trade\OneDrive\Dokumente\GitHub\nUpdate\nUpdate\Updating\UpdaterUI.cs:Zeile 55.
      InnerException:


      So richtig?

      ~gfc
      Ja. Dieses Problem hatte @KaskadekingDE auch schon ganz am Anfang.
      github.com/ProgTrade/nUpdate/b…Updating/UpdaterUi.cs#L58

      Die Exception wird abgefangen, das heißt, das liegt bei Dir an Visual Studio. Wenn Du es ohne vshost startest, geht das. Du kannst das auch beim Debuggen einstellen, indem Du unter Ausnahmeeinstellungen gehst und dort bei CLR-Exceptions die InvalidOperationException entsprechend anpasst, dass sie nur geworfen wird, wenn sie nicht gecatcht wird. ;)

      Das werde ich aber in der nächsten Version sowieso so ändern, dass das über eine Abfrage geregelt wird. Dann hat sich das so oder so gegessen und ist sauberer.

      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,

      also das rechte geht in dem Fall, bei anderen Tabs (General z. B.) würde es jedoch auch nicht gut aussehen, wenn man es in die Breite zieht. Das erste gefällt mir nicht so, einfach so viel Whitespace links und die Form ist einfach zu groß.
      Weiß ja nicht, wie andere das sehen.

      Aber kannst ja entsprechend für Dich anpassen, dafür ist es ja OpenSource. ;)

      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 :!:
      Eine Idee hätte ich...

      Wäre es möglich auch VB.NET Code anstatt C# Code zu senden & exekutieren?

      Trade schrieb:

      Eine Unterstützung für VB.NET kommt im nächsten Update.

      War also schon geplant, nur kamen noch kleinere Updates dazwischen. Wird ebenfalls in der Release-Version kommen.

      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 :!:
      Am Design sollte eigentlich nichts geändert werden. Finde es gut wie es ist ^^

      Grüße
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

      Trade schrieb:

      War also schon geplant
      Habs mir nicht angeguckt, aber wenn ich das lese, frage ich mich, ob man auch PowerShell-Skripte verwenden kann (die sind ja genau für sowas gedacht).

      Was benutzt du für eine Versionisierung? SemVer? Oder was anderes/bessers? Wenn was anderes: Ist SemVer-Support geplant?

      Trade schrieb:

      Unterstützung von TAP ist in nUpdate auch etwas, dass es dort nicht gibt.
      Ich seh davon hier irgendwie nichts.
      Von meinem iPhone gesendet
      PowerShell kann ich einbauen, sodass das mit dem nächsten Update kommt.
      Die Versionierung bleibt dem Nutzer überlassen. Die UpdateVersion-Klasse unterstützt sowohl die normale als auch die mit SemanticVersions. Die Angaben sind da durchaus recht flexibel und entsprechend kann man sich das auch alles ausgeben lassen. Intern wird das alles an Daten aufbewahrt und die Versionen dann halt verglichen (über entsprechende Operatoren etc.).

      Dann verlinkst Du hier auf den Installer. Das ist das einzige Projekt, das kein TAP nutzt, da
      1. nur ein einziger Thread benutzt wird für das Ausführen von ​RunUpdateAsync.
      2. der Aufwand deshalb höher ist als der Nutzen weitere Abhängigkeiten und DLLs zu schaffen, die den Installer aufblähen und das eben wegen 1 Mal
      3. es dem Nutzer nichts bringt, selbst wenn man die Methoden awaitable macht, da er es nicht für sein Projekt nützlich machen kann. Es geht hier ja nur um den Installer und der regelt das intern. Ob hier nun alles async-await benutzt oder dann intern im Thread alles nacheinander aufgerufen wird, ist egal, das kommt auf das Selbe raus.


      Zwar ist TAP der neue Weg für asynchrone Operationen, nur hier würde das eigentlich nur mehr Nachteile bringen. Und jetzt mal ehrlich, ob ich nun 1 Mal einen ThreadPool stattdessen nutze... Das kann man denke ich verkraften.
      Klar ginge das noch mit Tasks, da die ab .NET 3.5 da sind, aber gut. Kann man immer noch. Das ändert ja dennoch nicht viel.

      TAP ist da verfügbar, wo der Nutzer es auch aktiv nutzen und gebrauchen kann (Library) und dort, wo die DLLs keine Rolle spielen (Administration).
      Würde das Projekt (Installer) .NET 4.5 nutzen oder dauernd asynchrones Zeugs verwendet werden, sähe das nochmal anders aus. In diesem Fall jedoch bringt es im Endeffekt keine wirklichen Vorteile.

      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:

      Die UpdateVersion-Klasse unterstützt sowohl die normale als auch die mit SemanticVersions
      Wenn du das damit meinst, sieht das für mich nicht Standardkonform aus. Zumal die Build-Metadata fehlt, die zwar beim Vergleich nicht beachtet wird, aber trotzdem zur Version gehört. Wenn du beide Versionsmuster unterstützen willst, würde ich das über ein Interface abstrahieren.

      Trade schrieb:

      es dem Nutzer nichts bringt, selbst wenn man die Methoden awaitable macht
      Ich meine nicht, dass da alles awaitable sein soll. Zum TAP gehören auch die Standard-Entwurfsmuster wie IProgress<T> und CancellationTokens (welche du ja an ner anderen Stelle benutzt). Aber du hast recht, wenn du auf maximale kompatibilität abzielst, macht's keinen Sinn, dafür extra noch nen Package zu installieren.
      Von meinem iPhone gesendet