nUpdate - Die komfortable Updatelösung

    • Release
    • Open Source

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

      Danke Dir und auch für Dein Verständnis.
      Ich würde auch liebend gern wieder weiter daran entwickeln. Habe nur zurzeit immer noch recht viel zu tun beruflich und nebezu muss ich noch eine Forschungsarbeit abschließen. Wenn letztere dann wegfällt, dann kann ich mal schauen, ob ich mal wieder Zeit finde.

      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,
      ich sehe nach meinem letzten Problem, vor einem Jahr, hat noch keiner wieder etwas gefragt,
      und jetzt habe ich ein neues Problem mit meinem Programm in einer Umgebung mit Proxys.
      Das Update wird geladen und dann erscheint folgende Fehlermeldung:

      Auf einem PC ohne Proxy läuft es Problemlos durch.
      Ich habe dem Manager ein Proxy mir IP und Port übergeben und 2 Varianten bei den Credentials probiert:
      • userdeafultcredentials = true
      • credentials = System.Net.CredentialCache.DefaultCredentials
      Beide mit dem gleichen Fehler.
      Ich verwende WebProxys auf für weitere Kommunikation mit dem externen Server, das klappt einwandfrei.
      Was mache ich verkehrt?

      Nachtrag: Es administrative Rechte sind nur für den Installationsordner des Programms vergeben, braucht nUpdate mehr Rechte beim installieren?

      Viele Grüße
      Archangel
      Bilder
      • NUpdate.PNG

        10,92 kB, 386×237, 58 mal angesehen

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

      Hello again,

      Kann man nUpdate eigentlich auch mit einem anderen Benutzerkonto aufrufen. Mittlerweile verfestigt sich der Eindruck, dass dies die Ursache des Problems sein könnte. Der User ist kein Admin. Wenn die Anwendung auf einem nicht Adminkonto gestartet wird kann die Anwendung dann mit den Zugangsdaten eines anderen Accounts ausgeführt werden, der dann Adminrechte hat?
      Viele Grüße
      Archangel
      Ein derartiges Szenario ist leider noch nicht möglich. Sowas hatte ich aber mal geplant. Gerade in Firmennetzwerken ist sowas sinnvoll, da sonst immer jemand aus der IT-Abteilung die Updates machen muss. Auf diese Weise könnte dann mit hinterlegten Credentials ein Auth-Szenario erfolgen, um die Rechte zu erteilen.

      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,

      Darf ich die bitten nochmal ein Blick auf mein Problem zu werfen?

      Ich versuche das Problem weiter einzugrenzen. Es stockt mit der Fehlermeldung aus meinem gestrigen, 1. Post. Anfangs dachte ich der Proxy ist das Problem, aber der Fortschrittbalken beim Download deutet ja darauf hin, das der Punkt klappt. Die erforderlichen Adminrechte auf dem Ordner in Programme(X86)/MeinProgramm wurden ebenfalls aufgehoben. Die UAC ist ebenfalls ausgeschaltet auf den PC's. Was kommt als Ursache für den obigen Fehler in Betracht? Geht nUpdate in die Registry? Wird ein anderer empfindlicher Bereich angesprochen oder deuten wir den Fehler falsch?
      Vielen dank schon mal,

      Archangel
      Ich glaube nicht, dass es damit was zu tun hat. Da stimmt eher irgendwas mit den Paketdaten nicht. Glaube wir hatten ja noch geschrieben letztes Mal wegen der Paketkompatiblität, oder? Weil da mit den Versionen Unterschiede vorhanden waren. Ist natürlich jetzt schwierig ohne genauen StackTrace da eine direkte Fehlerquelle auszumachen.

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

      SFTP-TransferInterface

      Hi Trade,

      erstmal dickes Lob an die verrichtete Arbeit, Hut ab :thumbsup:

      Ich habe mich gerade mal daran versucht, ein TransferInterface für SFTPzu programmieren, da dies von nUpdate (noch?) nicht unterstützt wird.
      Leider bekomme ich beim Einbinden immer die folgende Fehlermeldung:
      The selected assembly doesn't contain any types that are marked with the TransferServiceProvider-attribute.

      Allerdings weiß ich nicht, wo ich welches Attribut mit angeben muss...vielleicht kannst Du mir da helfen?
      Hab mal in den Quellcode auf GitHub geschaut, wie Du es in der Klasse FtpTransferService gemacht hast, aber so bekomme ich den besagten Fehler.

      Meine SftpTransferService-Klasse erbt nur von ITransferProvider ohne weitere Attribute...

      Edit:
      Habe noch etwas weiter experimentiert und in meinem jugendlichen Leichtsinn vor der Namespace-Deklaration nun noch folgendes angegeben:

      C#-Quellcode

      1. [assembly: ServiceProvider( typeof (ITransferProvider ))]


      Dann erscheint ein anderer Fehler:
      Implementation of IServiceProvider is missing. Parametername: serviceType

      Die Exception dazu:

      Quellcode

      1. System.ArgumentException: Implementation of IServiceProvider is missing.
      2. Parametername: serviceType
      3. bei nUpdate.Administration.TransferInterface.ServiceProviderAttribute..ctor(Type serviceType) in C:\Users\Dominic\source\repos\nUpdate\nUpdate.Administration.TransferInterface\ServiceProviderAttribute.cs:Zeile 23.
      4. bei System.Reflection.CustomAttribute._CreateCaObject(RuntimeModule pModule, IRuntimeMethodInfo pCtor, Byte** ppBlob, Byte* pEndBlob, Int32* pcNamedArgs)
      5. bei System.Reflection.CustomAttribute.CreateCaObject(RuntimeModule module, IRuntimeMethodInfo ctor, IntPtr& blob, IntPtr blobEnd, Int32& namedArgs)
      6. bei System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule decoratedModule, Int32 decoratedMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, Boolean mustBeInheritable, IList derivedAttributes, Boolean isDecoratedTargetSecurityTransparent)
      7. bei System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeAssembly assembly, RuntimeType caType)
      8. bei nUpdate.Administration.Core.ServiceProviderHelper.CreateServiceProvider(Assembly assembly) in C:\Users\Dominic\source\repos\nUpdate\nUpdate.Administration\Core\ServiceProviderHelper.cs:Zeile 18.
      9. bei nUpdate.Administration.UI.Dialogs.FtpAssemblyInputDialog.continueButton_Click(Object sender, EventArgs e) in C:\Users\Dominic\source\repos\nUpdate\nUpdate.Administration\UI\Dialogs\FtpAssemblyInputDialog.cs:Zeile 51.

      Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „TRiViUM“ ()

      Sorry für die späte Antwort.

      @TRiViUM Du musst noch einen ServiceProvider definieren, der deinen SftpTransferService übergibt. Analog wie hier: github.com/dbforge/nUpdate/blo…ransferServiceProvider.cs.
      Gerne einen PR stellen, wenn Du es gebaut hast.
      @Montoyafan Schau dir dazu die SearchForUpdatesAsync-Methode an, die macht genau 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 :!:
      Update auf Version 4.0.0
      • Removed nUpdate.ProvideTAP and nUpdate.WithoutTAP packages and replaced them with one nUpdate package
      • Upgraded nUpdate package to .NET standard 2.0
      • Upgraded all other packages and applications to .NET Framework 4.6.1 and applied the SDK project styles
      • Fixed problems with TLS 1.2 and FTPS certificates in the administration
      • Simplified the project structures
      • Removed redundant dependencies to System.Windows.Forms and others
      Download: github.com/dbforge/nUpdate/releases/tag/v.4.0.0

      PM> Install-Package nUpdate -Version 4.0.0
      PM> Install-Package nUpdate.UI.WindowsForms -Version 1.0.0
      PM> Install-Package nUpdate.UI.WPF -Version 1.0.0

      Mit der Tatsache, dass die Bibliotheken für die UI noch auf .NET Framework 4.6.1 basieren, bin ich noch nicht ganz happy. Die meisten werden zwar noch .NET Framework einsetzen und man kann die zwar auch in .NET 5 und 6 verwenden, weil Microsoft da entsprechende Kompatiblität über den .NET Standard anbietet, aber wirft halt immer eine Warnung. Ich bin mir aber nicht sicher, ob .NET Standard 2.0 WPF-spezifische Daten bereitstellen kann. Andererseits würde die bestehende Kompatibilität ja dafür sprechen. Kann mir da jemand sagen, was eine gute Basis wäre?

      Auf .NET 5 und 6 zu basieren war auch noch eine Idee, aber ich weiß nicht, ob und wie sich das dann in .NET Framework nutzen lässt. Allgemein ist mir die Nutzungsbeziehung von Bibliotheken zwischen Framework und Core nicht ganz bekannt. Vielleicht kann mir da jemand einen Tipp geben.

      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

      Hätte nicht gedacht das du nochmal ein update rauswirfst, wie läuft es mit der "neuen" Version?

      Zu deiner Frage: Ich würde komplett auf .Net 5 aufsetzen. .Net 5 bietet auch die Möglichkeit als "Self-contained application" zu kompilieren. Da werden alle benötigten Abhängigkeiten in das Ausgabeverzeichnis kopiert und die Anwendung kann gänzlich ohne einem installierten .Net Framework laufen. Da biste also auf der sicheren Seite.
      Alle Assemblys auf welche vom Drittentwickler zugegriffen werden soll sollten in .Net Standard verbleiben und die größtmögliche Kompatibilität zu erzielen.

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

      Hi,

      das klingt interessant. Wusste ich tatsächlich noch nicht. Kann ich das dann regulär über NuGet auch verteilen und jeder kann es referenzieren? Das wird aber recht groß sein, oder? Was ich grunmdsätzlich gesucht hätte, wäre .NET Standard mit WPF-Support. :D
      nUpdate 5.0 habe ich letztens etwas weiterentwickelt. Ich plane das mal nebenzu am Wochenende immer bisschen voranzubringen. Möchte das ordentlich aufziehen, d.h. .NET 6, WPF, 100% Testabdeckung, vllt. eine kleine Webanwendung (RoR und node.js) usw.

      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:

      Was ich grunmdsätzlich gesucht hätte, wäre .NET Standard mit WPF-Support.

      Das wird hald nix. Sowohl .Net Core/.Net 5/.Net 6 und .Net Standard sind Cross-Plattform fähig.

      Nur ist der Unterschied bei .Net Core das du bestimmen kannst das es quasi "Windows-Only" sein soll indem du die Projektdatei dahingehend bearbeitest das du statt:

      XML-Quellcode

      1. <TargetFramework>net5.0</TargetFramework>


      hier einfach folgendes daraus machst:

      XML-Quellcode

      1. <TargetFramework>net5.0-windows</TargetFramework>
      2. <UseWPF>true</UseWPF>

      was ja automatisch gemacht wird wenn du eine WPF App erstellst. Aber um z.b. in deinem ViewModel den beliebten CommandManager nutzen zu können müsstest du genau so vorgehen um einen Verweis auf die PresentationCore.dll zu erhalten und somit die Windows.Input importieren kannst. Dies ist unter .Net Standard meines Wissens nach nicht möglich.

      Freu mich das es trotzdem weiter geht mit der neuen Version.

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

      Verstehe, danke. Das müsste der neue SDK-Style in der Projektdatei sein. DIe habe ich ja schon soweit migriert, dass ich das einfach umstellen könnte.
      Können .NET-Framework-Anwendungen dann die .NET 5-Anwendungen probelmlos referenzieren und wenn ja, funktioniert das über ein Kompatiblitätspaket? Das ist der Punkt, der mir nicht ganz klar ist, da Core und Framework ja unterschiedliche Core Libraries in der Basis haben. Oder muss man die quasi immer standalone kompilieren, um sie unabhängig davon nutzen zu können?

      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:

      Können .NET-Framework-Anwendungen dann die .NET 5-Anwendungen probelmlos referenzieren

      Ne, das klappt nicht. Deshalb meinte ich ja das du nur .Net Standard für alles nehmen solltest was vom Entwickler (du weist hier ja nicht unter was er proggt) referenziert werden soll.

      Natürlich kannst du auch für Verschiedene Frameworks kompilieren:

      VB.NET-Quellcode

      1. <TargetFrameworks>net461;net5.0</TargetFrameworks>

      Du musst dann gewisse Codepassage vtl. je nach Framework getrennt behandeln:

      VB.NET-Quellcode

      1. ​#if NET461 // something that only exists in .NET Framework 4.6.1
      2. #elif NET50 // something that only exists in .NET 5.0
      3. #endif



      Referenzen musst da dann aber auch getrennt hereinholen:

      XML-Quellcode

      1. <ItemGroup Condition="'$(TargetFramework)' == 'net461'">
      2. <Reference Include="PresentationCore" />
      3. </ItemGroup>


      Also ich würde bei .Net Standard für sowas bleiben.

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

      Ganz kurz und knapp:

      Jemand der NET5 / NET6 / NET7 usw. nutzt kann definitiv .NET Standard 2.1 und früher referenzieren.
      Allerdings kann Standard 2.1 nicht im NET Framework referenziert werden.

      Um .NET Framework UND .NET zu unterstützen musst du also bei Standard 2.0 bleiben.

      Willst du neue Sprachfeatures nutzen dann solltest du natürlich NET5+ nutzen. Hast dann aber keine Möglichkeit mehr diese NET5+ Lib im Net Framework zu nutzen.
      So hab ich das ganze verstanden und aufgesaugt dazu noch 2 Links:

      devblogs.microsoft.com/dotnet/the-future-of-net-standard/
      docs.microsoft.com/en-us/dotnet/standard/net-standard
      Grüße , xChRoNiKx

      Nützliche Links:
      Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
      @Nofear23m, @xChRoNiKx Jo, das mit .NET Standard ist mir klar. Für reine Bibliotheken ist das ja auch einfach. Mir ging es nur um nUpdate.UI.WindowsForms und nUpdate.UI.WPF, da man Windows Forms und WPF ja auf Basis vom .NET-Framework und .NET Core nutzen kann und ich mit meinem Projekt beide Zielplattformen gleichzeitig unterstützen möchte. Da kann ich aber kein .NET-Standard für verwenden, weil der immer Cross-Plattform ist und die zugehörigen Windows-APIs nicht unterstützt bzw. auch nicht wie .NET (Core) auf Windows spezifiziert werden kann.

      xChRoNiKx schrieb:

      Hast dann aber keine Möglichkeit mehr diese NET5+ Lib im Net Framework zu nutzen
      Genau das ist daher das Problem. :D Dann kann ich nur entweder Framework-Nutzer unterstützen oder die zwingen auf .NET5+ umzustellen. Oder gibt es einen binären Weg über standalone Binaries?

      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:

      Dann kann ich nur entweder Framework-Nutzer unterstützen oder die zwingen auf .NET5+ umzustellen.

      Oder wie von mir Beschrieben aufbauen.
      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. ##

      Verstehe. Die Frage ist, wie viele Passagen getrennt behandelt werden müssen. Durch die .NET Standard-Implementierung sollte ja das nötigste in beidem vorhanden sein. Das UI-spezifische wird sich ja ansonsten auch nicht so großartig unterscheiden, wenn beides die Unterstützung liefert. Allerdings die Referenzen für die Bibliotheken halt... Und so getrennte Konfigurationen will ich eigentlich aus Wartungsgründen vermeiden.

      Meint Ihr ein Zwang auf mind. .NET 5 macht zum jetzigen Zeitpunkt schon Sinn? Ist ja immer so n Ding, wie lange man Abwärtskompatiblität gewährleisten sollte. War ja mit .NET Framework 4.0 auch schon so. Andererseits könnte ich auch v5 auf .NET 5/6-Basis releasen und die anderen mit .NET-Framework sollen halt die Pakete in Version 1 benutzen (was aber auch wieder erklärt werden muss usw.). Jedoch mal n Update für .NET zu machen, sollte für keinen n Problem darstellen. Auch nicht für Firmen, die ich in Zukunft auch ansteuern will.

      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“ ()