nUpdate - Die komfortable Updatelösung

    • Release
    • Open Source

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

      Mini-Update auf Version 3.0.0 Beta 4

      Änderungen:
      https://github.com/ProgTrade/nUpdate/commit/b7c0cc0d1bffac483b8dbd4e5d7b912ca3b12ea2

      Solltet Ihr die SearchForUpdates-Routine mehrmals im Code verwenden, um auf Updates zu prüfen, so solltet Ihr diese neue Version verwenden. Ansonsten ist ein Update nicht unbedingt notwendig.

      Also noch nicht die 4.0.0, aber es gab da eben noch einen kleinen Bug, den ich hier behoben habe. Danke an @Solaris.
      Download befindet sich im Startpost. Die NuGet-Pakete werde ich morgen aktualisieren.

      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 2 mal editiert, zuletzt von „Trade“ () aus folgendem Grund: Versions-Fehler behoben

      Die NuGet-Pakete sind jetzt aktuell. Sollte jemand Probleme haben, diese zu installieren, muss darauf geachtet werden, dass der NuGet Paketmanager aktuell ist. Die älteren Versionen haben anscheinend Probleme bei der Installation der Pakete.
      Ich habe jetzt BTW relativ viel Zeit und entwickle die 4.0.0 weiter. :)

      Die, die das ZIP-Archiv vom 29. Juni geladen haben, sollten außerdem bitte das neue im Startpost laden und die DLLs darin verwenden. Nichts problematisches, nur mit den Versionen hat was nicht gestimmt.

      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 :!:
      Abend!
      Funktioniert das System nicht mit Konsolenanwendungen?

      Habe folgendes in meinem Main-Event:

      C#-Quellcode

      1. UpdateManager manager = new UpdateManager(new Uri("HOSTER"), "KEY", new CultureInfo("en"));
      2. var updaterUI = new UpdaterUI(manager, SynchronizationContext.Current);
      3. updaterUI.ShowUserInterface();


      Er sucht weder nach Updates, noch findet er das Update was ich zu Testzwecken hochgeladen habe.
      Assemblyversion ist eingetragen..
      Meine Projekte:

      WizSearch: 100%
      Ansehen
      Jein. nUpdate an sich kann natürlich in Konsolenanwendungen benutzt werden, aber nicht mit dem UpdaterUI. Grund ist, dass ich dort logischerweise modale Dialoge verwende und dafür ein anwendungsweiter MessageLoop registriert werden muss. Dies übernimmt in einer WinForms-Anwendung normalerweise Application.Run. Sicher kann man sich da einen kleinen Workaround basteln, aber imho macht's auch nicht so viel Sinn, ein UI in einer Konsole zu haben. Stattdessen würde ich das mit der Konsole alles anzeigen und verwalten.
      Ich habe das mal als Anforderung in den Startpost geschrieben.

      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 für die Antwort, dann werde ich mal eine Form hinzufügen, die das Update abfrage und dann die Konsole startet.

      Liebe Grüße

      EDIT: Krieg es leider nicht richtig gebacken. Hoffe es wird bald eine Funktion für Konsolen geben.

      Meine Projekte:

      WizSearch: 100%
      Ansehen

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

      FlorianJ schrieb:

      Hoffe es wird bald eine Funktion für Konsolen geben.
      Das kann man sich ja selbst zusammenbasteln, indem man die einzelnen Methoden vom UpdateManager verwendet. Macht ja auch UpdaterUI nicht anders.

      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 :!:
      Habe es jetzt mal so probiert:

      C#-Quellcode

      1. UpdateManager manager = new UpdateManager(new Uri("HOSTER"), "KEY", new CultureInfo("en"));
      2. System.Console.WriteLine(manager.SearchForUpdates() ? "Update gefunden. [Enter zum installieren]" : "Keine Updates gefunden. [Enter um fortzufahren]");
      3. manager.CloseHostApplication = true;
      4. System.Console.ReadLine();
      5. System.Console.WriteLine("Lade Update herunter...");
      6. manager.DownloadPackages();
      7. System.Console.WriteLine("Installiere Updates..");
      8. manager.InstallPackage();


      leider sagt er aber immer, dass er das Update nicht installieren kann, da es gerade in Verwendung ist. Glaube "CloseHostApplication" funktioniert bei der Konsole nicht.

      Liebe Grüße
      Meine Projekte:

      WizSearch: 100%
      Ansehen
      Das mit dem Ui sollte doch trotzdem funktionieren. Solange der Apartmentstate des Threads auf STA steht, dürfte das kein Problem sein.
      Einfach der Main-Methode das [STAThread] Attribut geben.


      Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

      thefiloe schrieb:

      Das mit dem Ui sollte doch trotzdem funktionieren. Solange der Apartmentstate des Threads auf STA steht, dürfte das kein Problem sein.
      Einfach der Main-Methode das [STAThread] Attribut geben.


      Funktioniert leider nicht. :/
      Mit dem UpdateSystem.NET funktioniert es (auch ohne [STAThread]), hat aber leider keine Funktion für await bzw async..
      Meine Projekte:

      WizSearch: 100%
      Ansehen

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „FlorianJ“ ()

      Ob das mit nUpdate geht oder nicht kann und will ich nicht beurteilen. Mir geht es vielmehr darum:
      img5.fotos-hochladen.net/uploads/holzshotsuh8exj6v5z.png


      Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
      Nope, das mit dem STAThreadAttribute haut nicht hin.
      @FlorianJ CloseHostApplication steht standardmäßig auf true. Hast Du das Ganze ohne den VS-Hostingprozess getestet? Ich kann mir durchaus vorstellen, dass da was blockiert.

      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 :!:
      Ah, wait. Da fällt mir was zu ein. Ich habe damals da was nicht ganz astrein gelöst, was TerminateApplication anging. Das ruft nämlich Application.Exit auf, weil ich nicht in die Kompatibilität zu WPF und Konsolenanwendungen investiert hatte. (Das ist in der kommenden Version übrigens anders gelöst) - Kann gut sein, dass das daher nicht korrekt beendet.
      In so einem Fall muss man sich 'nen kleinen Workaround schreiben, indem man die Methode in einer entsprechenden Unterklasse überschreibt. Wird denn die Konsole überhaupt korrekt geschlossen?

      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 :!:
      Normal ist da auch keines, aber ich habe die starke Vermutung, dass es an den modalen Dialogen hapert oder vielmehr irgendwas mit dem SynchronizationContext zu tun hat. Kann's Dir aber auch nicht 100%ig sagen. Es klappt eben einfach nicht.
      Aber ich kann da ja mal ein wenig forschen.

      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 :!:
      Vollzitat entfernt. ~Trade

      Die Anwendung wird nicht geschlossen..
      Meine Projekte:

      WizSearch: 100%
      Ansehen

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

      thefiloe schrieb:

      Das mit dem Ui sollte doch trotzdem funktionieren. Solange der Apartmentstate des Threads auf STA steht, dürfte das kein Problem sein.


      thefiloe schrieb:

      img5.fotos-hochladen.net/uploads/holzshotsuh8exj6v5z.png


      Hast du dies gesehen/gelesen?
      Was verstehst du unter modalem Dialog, wenn nicht ShowDialog()?


      Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
      @thefiloe Ahja, sorry, dann wird sehr wahrscheinlich der SynchronizationContext der Grund sein. Aber wie gesagt, kA. Ich werde das mal näher durchleuchten.
      @FlorianJ Jo, das ist es wohl. Versuch mal das:

      C#-Quellcode

      1. public class ConsoleUpdateManager : UpdateManager
      2. {
      3. public ConsoleUpdateManager(Uri updateConfigurationFileUri, string publicKey, CultureInfo languageCulture) : base(updateConfigurationFileUri, publicKey, languageCulture)
      4. { }
      5. public override void TerminateApplication()
      6. {
      7. Environment.Exit(0);
      8. }
      9. }


      Und verwende dann den statt den UpdateManager.

      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 :!:
      Funktioniert leider auch nicht. Die Anwendung bleibt offen, es kommt ein Fehler, dass eine .dll (die zu meiner Anwendung gehört) gerade in Verwendung ist.

      EDIT: Hab vergessen den neuen Manager zu benutzen, es funktioniert!

      Wie kann ich denn jetzt am Besten eine Abfrage machen, die abfragt, dass wenn ein Update gefunden wurde es herunterlädt und wenn nicht einfach weiter macht, als wäre alles i.O?
      Habe es ja jetzt so gelöst:

      C#-Quellcode

      1. System.Console.WriteLine(manager.SearchForUpdates() ? "Update gefunden. [Enter zum installieren]" : "Keine Updates gefunden. [Enter um fortzufahren]");
      2. manager.CloseHostApplication = true;
      3. System.Console.ReadLine();
      4. System.Console.WriteLine("Lade Update herunter...");
      5. manager.DownloadPackages();
      6. System.Console.WriteLine("Installiere Updates..");
      7. manager.InstallPackage();


      Laut meinen Erkentnissen wird aber IMMER ein Paket heruntergeladen.

      Meine Projekte:

      WizSearch: 100%
      Ansehen

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

      Freut mich.
      Jo, das hatte ich mir vorhin schon gedacht. SearchForUpdates gibt Dir einen bool zurück, der angibt, ob die Suche Updates ergeben hat, oder nicht. Einfach den auswerten.

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