Programmversion auf Update prüfen

  • VB.NET

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

    Programmversion auf Update prüfen

    Hallo,
    ich möchte mein Programm auf Updates prüfen lassen über einen Webclient. D.h. meine Programmversion mit der neuesten Versionsdatei auf einem Server vergleichen. Die neueste Versionsdatei lade ich vorher auf den ftp-Server hoch.
    Ich erhalte aber eine Fehlermeldung "System.Net.WebException: Die zugrundeliegende Verbindung wurde geschlossen...."
    In der txt-Datei steht nur eine Zeile mit der neuesten Version.
    Über die Suchfunktion bin ich hier nicht weitergekommen, gab ja schon paar Einträge. Mir kommt es vor, als ob der Server den Zugriff nicht gewährt. Wäre super, wenn einer eine Idee hätte.
    Mein Code sieht so aus:


    VB.NET-Quellcode

    1. Private WithEvents WC As New Net.WebClient
    2. Private Sub UpdatePrüfenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UpdatePrüfenToolStripMenuItem.Click
    3. Dim versionlink As String = "https://www.../Version.txt" 'VersionTextFile
    4. WC.DownloadStringAsync(New Uri(versionlink)) 'Startet den Download der Versions-Datei
    5. End Sub
    6. Private Sub WC_DownloadStringCompleted(ByVal sender As Object, ByVal e As System.Net.DownloadStringCompletedEventArgs) Handles WC.DownloadStringCompleted
    7. If e.Error Is Nothing Then
    8. Dim programversion As String = e.Result
    9. If programversion = My.Application.Info.Version.ToString Then 'Programmversion = neuester Onlineversion
    10. MessageBox.Show("Du hast schon die neueste Version", "Kein Update verfügbar", MessageBoxButtons.OK, MessageBoxIcon.Information)
    11. Else
    12. MessageBox.Show("Ein Update ist verfügbar")
    13. End If
    14. Else
    15. MessageBox.Show(e.Error.ToString)
    16. MsgBox("Fehler")
    17. End If
    18. End Sub


    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ich hab nun den TLS Code ganz am Anfang eingefügt und das Framework umgestellt. .
    Der ProtocolType akzeptiert nur Tls oder auch Ssl3, aber kein Tls12.
    Die Meldung ist nun:
    "Es konnte kein geschützter SSL/TLS-Kanal erstellt werden." bei Framework 4.
    Also wohl auch ein TLS-Sicherheitscheck bei meinem ftp-Server?

    Eingefügter Code:

    VB.NET-Quellcode

    1. ServicePointManager.Expect100Continue = True
    2. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls


    Diese Messagebox erhalte ich mit Framework 4.


    Diese Message erhalte ich mit Framework 3.5


    Ich versuchs noch mal mit .Net Framework 4.8

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „elmi01“ ()

    Dein FTP Server hat mit der Sache nichts zu tun, denn du nutzt das HTTP Protokoll, du landest also auf'm Port des Webservers, die Adresse startet ja nicht mit ftp://.

    Du kannst auch verschiedene TLS Version angeben, nicht nur 1.
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12

    Porbier erstmal ob überhaupt auf die Datei zugegriffen werden kann, hau die Url im Webbrowser rein und schau ob du den Inhalt siehst oder dir ein Download angeboten wird. Wenn keins von beiden, musst du deinen Server anders konfigurieren.

    Wenn's mit'm Browsergeht, versuch erstmal ohne das SecurityProtocol Protokoll festzulegen runter zuladen, wenn's nicht geht probiers mit meiner Zeile. Wenn dann auch nicht, arbeite mit dem aktuellsten FW 4.8, auch wieder ohne das SecurityProtocol festzulegen, evtl. dann auch noch mal mit.

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

    Hast du einfach nur die Runtime installiert? Oder hast du den VisualStudio Installer benutzt? Sowas kann man bequem mit dem Installer machen, alternativ, kannst du das FW4.8 developer Pack auch von Hand laden und installieren.

    Du brauchst aber mindestens eine dieser Windows-Versionen:

    Quellcode

    1. Included in:
    2. Windows 11
    3. Windows 10 May 2019 Update (and later versions)
    4. Visual Studio 2019 (16.3 update)
    5. You can install on:
    6. Windows 10 October 2018 Update
    7. Windows 10 April 2018 Update
    8. Windows 10 Fall Creators Update
    9. Windows 10 Creators Update
    10. Windows 10 Anniversary Update
    11. Windows 8.1 and earlier
    12. Windows Server 2022
    13. Windows Server 2019
    14. Windows Server, Version 1809
    15. Windows Server, Version 1803

    Bilder
    • Unbenannt.jpg

      43,36 kB, 428×340, 32 mal angesehen

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

    @elmi01

    Ich verwende auch eine einfache Textdatei mit der Versionsnummer am Webserver die ich auslesen und mit der aktuellen Versionsnummer vergleiche.
    Dazu habe ich in der App die Variable "Versionsnummer", welche beim Kompilieren immer die aktuelle Version beinhaltet.
    Ich verwende nicht die Versionsnummern von .NET.

    VB.NET-Quellcode

    1. Public Versionsnummer As String = "Build 22DEC2021.1"


    VB.NET-Quellcode

    1. Public Sub PruefeAufUpdate()
    2. Dim UpdateDatei As String = Path.Combine(RM2TemplateHelper_Programmverzeichnis, "rm2thversion.txt")
    3. If File.Exists(UpdateDatei) Then File.Delete(UpdateDatei)
    4. Dim client As New WebClient
    5. Try
    6. client.DownloadFile(New Uri("https://.........../rm2thversion.txt"), UpdateDatei)
    7. Catch
    8. 'Keine Verbindung zum Server
    9. Exit Sub
    10. End Try
    11. If File.Exists(UpdateDatei) Then
    12. Dim NeueVersion As String = IO.File.ReadAllText(UpdateDatei)
    13. If NeueVersion <> Versionsnummer Then
    14. Dim erg As DialogResult = MessageBox.Show("A new version is available on www..........com." + vbCrLf + vbCrLf + "Current installed version: " + Versionsnummer + vbCrLf + "Available for download: " + NeueVersion + vbCrLf + vbCrLf + "Would you like to download the update installation file?", "Newer app version available", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    15. If erg = DialogResult.No Then Exit Sub
    16. 'Hier downloaden
    17. Process.Start("https://www......com/downloadupdate.asp")
    18. End
    19. End If
    20. Else
    21. MsgBox("No connection to updateserver!")
    22. End If
    23. End Sub

    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Alles sehr fahrlässig für die User die hier Updates von euch runterladen. Die geladene Datei wird nicht geprüft und dann einfach ausgeführt.
    Was passiert hier wenn jemand euren Server kapert und die Update Datei austauscht? Dann habt ihr ein sehr großes Problem.

    Ich empfehle daher auch mal das hier zu lesen: Updater - Worauf sollte man bei eigenen Updatern achten?
    Sowie eventuell die Verwendung einer fertigen Lösung die auch sicherer ist als das hier geteilte.

    Hier eine Alternative aus dem Forum: nUpdate - Die komfortable Updatelösung

    Überlegt euch das ganze mal einmal mehr und denkt an eure User die im schlimmsten Falle alle Daten verlieren können nur weil
    hier beim Updaten nicht auf die Sicherheit geachtet wird.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Jupp, daher habe ich das auch schon weiter oben direkt erwähnt(verlinkt), aber die meisten juckt das erst oder denken drüber nach, wenn eine Schadensersatzklage im Briefkasten ist(manche nehmen es teils soagr bewusst in Kauf trotz der Hinweise), denn das ist ja wirklich grob fahrlässig, akzeptierte Nutzungbedingungen mit Haftungsausschluss schützen den Entwickler in dem Fall denke ich mal nicht. Weiss nicht ob beim TE die Software gewerblich ist, aber bei @dive26 wird seine Kassensoftware gewerblich vertrieben wie auch eingesetzt.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Takafusa“ ()

    @xChRoNiKx @Takafusa
    aber bei @dive26 wird seine Kassensoftware gewerblich vertrieben wie auch eingesetzt.

    Ja, die meisten meiner Anwendungen sind gewerblich. Aber keines meiner Produkte hat ein Autoupdate.

    Der oben gepostete Code ist von einer meinen kostenlosen Anwendung, aber auch wenns eine B2B Anwendung wäre, wäres schnurzegal.
    Hier wird keine Datei heruntergeladen und ungefragt irgendwo hingeschrieben oder ausgeführt, sondern lediglich nach Abgleich der Versionsinfos und Nachfrage beim Nutzer die Download-Seite geöffnet wo der Nutzer selbst entscheiden kann ob er/sie das Update herunterladen und ausführen möchte. Da gibts keine sicherheitsrelevanten Probleme damit. Update ist bei mir immer exakt das selbe wie ein Neudownload und eine Neuinstallation. Mit allen drum und dran - vor allem dem Zustimmen der Lizenzbedingungen in der Setup-Routine.

    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Hallo zusammen,

    ich kann die Sicherheitsbedenken mit dem WebClient nachvollziehen und suche nach einer Lösung.

    Ich habe deswegen nUpdate installiert und möchte damit den Updater integrieren.
    Das Problem ist nur, dass ich trotz Vorgehen nach Anleitung diesen nUpdate Fehler bekomme, sobald ich auf Create package gehe.
    Hi, welche Windows-Version benutzt du? Ist das 8 oder 10?

    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 :!:
    Windows 10 64bit hab ich.
    Hier die Meldung, wenn ich über RMT die Entire message kopiere:

    Quellcode

    1. System.Net.WebException: Die Anfrage wurde abgebrochen: Es konnte kein geschützter SSL/TLS-Kanal erstellt werden..
    2. bei System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
    3. bei System.Net.WebClient.DownloadString(Uri address)
    4. bei nUpdate.Updating.UpdateConfiguration.Download(Uri configFileUri, NetworkCredential credentials, WebProxy proxy, Int32 timeout) in C:\Users\Dominic\source\repos\nUpdate\nUpdate.Shared\Updating\UpdateConfiguration.cs:Zeile 117.
    5. bei nUpdate.Administration.UI.Dialogs.PackageAddDialog.<InitializePackage>b__85_0() in C:\Users\Dominic\source\repos\nUpdate\nUpdate.Administration\UI\Dialogs\PackageAddDialog.cs:Zeile 1135.


    Vermutlich hat nUpdate (V3.5.0) mit TLS1.2 Schwierigkeiten? Ich hab gesehen, es gab schon mal einen Thread dazu: Link
    Mit dem .Net Framwork 4.8 kann ich in VB.Net jedoch mit TLS1.2 auf den Server zugreifen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „elmi01“ ()

    Ja, du hast recht. Das liegt an .NET 4. Eigentlich müsste nUpdate auf .NET 4.5 laufen, um TLS 1.2 zu können.
    Ich veröffentliche später ein Update, das das fixt.

    Edit: @elmi01 Habe es hier schon veröffentlicht: github.com/dbforge/nUpdate/releases/tag/v.4.0.0
    Lade das mal bitte runter und probiere es.

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