Update Funktion Bug

  • VB.NET

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

    Update Funktion Bug

    Hallo nochmal ihr lieben! :)

    Grade das erste Problem gelöst kommt schon das nächste.

    Ich habe mir eine sehr einfach gehaltene Update Funktion gemacht.

    VB.NET-Quellcode

    1. Function TestInternetConnection()
    2. Try
    3. My.Computer.Network.Ping("google.de")
    4. Return 1
    5. Catch ex As Exception
    6. Return 0
    7. End Try
    8. End Function
    9. Dim web As New Net.WebClient
    10. Sub RunUpdate()
    11. If TestInternetConnection() = 1 Then
    12. Try
    13. Dim version As String = web.DownloadString("http://marvinkleinmusic.bplaced.net/Dezimalrechner/current_ver.txt")
    14. version = CInt(version)
    15. If version > CInt(lblversion.Text) Then
    16. Try
    17. Dim path As String = "http://marvinkleinmusic.bplaced.net/Dezimalrechner/Umrechner.exe"
    18. My.Computer.Network.DownloadFile(path, Application.StartupPath & "/[Update" & version & "]" & "Umrechner.exe")
    19. MsgBox("Das Programm wird Upgedatet.")
    20. Catch ex As Exception
    21. MsgBox(ex.ToString)
    22. End Try
    23. End If
    24. Catch ex As Exception
    25. 'nichts
    26. End Try
    27. End If
    28. End Sub


    Diese Funktioniert auch einwandfrei.

    Doch allerdings nur wenn man Internet hat. Fehlt das Internet hängt das Programm sich für exakt 36 - 40 Sekunden auf.

    Ebenfalls möchte ich nicht umbedingt immer eine Neue exe speichern sondern nur die alte austauschen.

    Wie mache ich das? :)

    LG
    Hy, schau dir doch mal mein und @Trades: update Clienten an.

    [Beta] Freesoft Auto Updater
    nUpdate - Dein einfaches und sicheres Updatesystem

    Damit hats du bei beiden ein sicheres System.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    So viel Crap...in so wenig Code....:/

    Folgendes zu deinem Code:

    - Versuche den "My." Namespace zu vermeiden (nicht C# kompatibel etc.)
    - Verwende Messagebox.Show() statt Msgbox()
    - Rechne nie mit Labeln, die GUI dient NUR zur Darstellung.
    - Die ganzen unnötigen Try/Catch's können auch raus.

    Zu deinem Problem:

    Verwende am besten ein fertiges Updatesystem, diese signieren alles richtig und bieten auch den nötigen Komfort.

    Folgende kann ich dir empfehlen:

    nUpdate vom User @Trade : vb-paradise.de/sonstiges/weite…und-sicheres-updatesystem
    Updatesystem.NET : updatesystem.net/

    MarvinKleinMusic schrieb:

    Doch allerdings nur wenn man Internet hat. Fehlt das Internet hängt das Programm sich für exakt 36 - 40 Sekunden auf.
    Verlege dafür die Update Funktion in einen anderen Thread oder benutze die Async Methoden.

    MarvinKleinMusic schrieb:

    Ebenfalls möchte ich nicht umbedingt immer eine Neue exe speichern sondern nur die alte austauschen.

    Eine Anwendung kann sich nicht selber aktualisieren...
    was du machen kannst... in deine Hauptanwendung auf die version prüfen, wenn neuer dann eine Updater.exe laden, diese starten, hauptanwendung beenden.
    Updater.exe die Hauptanwendung aktualisieren lassen, Hauptanwendung starten, Updater beenden.

    Optional: In Hauptanwendung die updater.exe löschen.

    Andy16823 schrieb:

    Hy, schau dir doch mal mein und @Trades: update Clienten an.

    [Beta] Freesoft Auto Updater
    nUpdate - Dein einfaches und sicheres Updatesystem

    Damit hats du bei beiden ein sicheres System.

    Ich Probieres mal habe es auch Installiert allerdings erschließt sich mir nicht wie ich die Updates durchführen kann ich erhalte jedesmal die Meldung das die Signaturen nicht gleich sind.

    Habe es genau wie in der Anleitung befolgt.

    Habe key generiert und diesen wert dann in das entsprechende Feld in Visual Basic eingetragen , Runterladen tut er es auch nur Installieren will er nicht.

    Liegt es vielleicht dadran das ich das Zip Paket erst Nach dem erstellen befülle mit der exe etc.??

    Oder was mache ich falsch?

    Habe die dll drin imports ist drin.

    Ich starte die exe -->neues paket -->schlüssel erstellen ---> wähle Dezimalrechner.zip im ersten Feld -->gebe changelog ein -->ausgabe ort-->Versions NR -->Kopiere den Code in VB rein-->Erstellen-->kopiere aus project mappe /bin/release alle datein in das update.zip archiv -->nenne dieses dann Dezimalrechner.zip und lade alle 4 datein auf den angegebenen Pfad hoch.


    LG
    Ist zur Zeit eh nicht benutzbar :P Ich arbeite noch an nem Fix, wird hoffentlich bald rauskommen ;)
    Ich schätze, da ist einfach ein Fehler bei dir reingekommen, aber na ja.

    Währenddessen kannst du Updatesystem.NET o. ä. benutzen.
    #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 :!:
    @MarvinKleinMusic: Aha, du sagst, du befüllst das Archive erst nachher. Dann kann es nicht gehen, denn somit ändern sich die Daten und die Signatur ist ungültig.

    Du musst das Archiv bereits vorher befüllt haben. Trotzdem ist da noch das Problem, dass der Private Key nicht gespeichert wird und somit spätere Pakete natürlich nicht erkannt werden können. Ich bemühe mich das zu fixen, dann benachrichtige ich dich per PN, falls du noch Interesse hast.
    #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 :!:
    Wie soll ich das denn sonst machen? :)

    Ich muss ja erstmal irgendwie den Code in das Programm speichern , allerdings bekomme ich den Code erst nach dem Generieren.

    und wieso erhalte ich immer eine Update.zip wenn ich dem Programm sage er soll Dezimalrechner.zip nutzen? :)
    Du hast es erfasst :D Genau das ist das Logikproblem, da der Private Key nicht gespeichert wird :(
    Daran arbeite ich grade. Deswegen ist nUpdate nur zum Experimentieren benutzbar, wenn die 1.1 da ist, wird sich das ändern.

    Die Datei wird einfach umbenannt, du kannst sie danach auch umbenennen, musst halt im Code die Url abändern ;)
    #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 :!:
    Ich nehme mal an man erhält den Code dann voher trägt ihn dann dort ein in VB dann Erstellt man die Anwendung --> Zieht alles aus dem Realease Ordner in ein Zip paket und dann muss man das Anwählen. Oder wie
    soll der ABlauf eigendlich ablaufen? :)
    Jo, dann wenn das Archiv bepackt ist lässt du die Signatur erstellen und lädst alles auf den Server hoch.
    Ich glaube wir sollten da per PN weiterreden, ist sonst bisschen unpassend ;)
    #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 :!:

    VB.NET-Quellcode

    1. Dim WB As New Net.WebClient
    2. Dim AktuelleVersion As Decimal = 1.0.1
    3. Dim DownVersion As Decimal = CDec (WB.DownloadString("http://www.meinehomepage.org/neuesteversion.txt")
    4. If AktuelleVersion < DownVersion Then 'Prüft ob neue Version Vorhanden
    5. WB.DownloadFile ("http://www.meinehomepage.org/neuerversionupdater.exe", "Updater.exe") 'Lädt den Updater herunter
    6. Process.Start ("Updater.exe") 'Startet den Heruntergeladenen Updater
    7. Application.Exit 'Beendet die Anwendung das der Updater ungestört die EXE Erstetzten kann
    8. End If
    Herzlichen Glückwunsch, @ManuelSoftware:, du hast gerade eine riesige Sicherheitslücke verbreitet und anbei noch einen schlechten Code.
    Das Thema war eigentlich geklärt.

    Warum benutzt du nen Decimal? 8| Die Version-Klasse macht hier nur Sinn... Dann brauchste auch nix konvertieren.
    Zudem lädt das ja alles nur den Updater runter, nicht das Updatepaket. Warum sollte man sich das alles nochmal so verkomplizieren, statt es gleich zu laden und mit einer externen Anwendung, die eingebettet ist überschreiben?! Somit hätte man auch mehr Kontrolle.
    #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 :!: