Visual basic updater

Status
Niet open voor verdere reacties.

mastermindzh

Verenigingslid
Lid geworden
10 dec 2008
Berichten
4.993
ik wil in mijn programma een update functie hebben, nou leek dit eerst gelukt maar nu werkt hij niet meer :(


zien jullie iets verkeerds? of vindt je een andere manier beter dan hoor ik het graag!



*uitleg*

ik haal dus een tekstbestandje van het internet af en daarin staat 2.0.0.0 (en programma is 2.0.0.0)
dus dan zou hij NIET moeten zeggen dat je kunt updaten... toch doet hij dat :evil:

*/uitleg*

Code:
Dim updater As Integer

Code:
    Public Sub checkforupdates()
        Dim file As String = Application.StartupPath & "/version.txt"
        Dim MyVer As String = My.Application.Info.Version.ToString

        If My.Computer.FileSystem.FileExists(file) Then
            My.Computer.FileSystem.DeleteFile(file)
        End If
        My.Computer.Network.DownloadFile("http://virtualpetstool.webs.com/version.txt", file)

        Dim lastver As String = My.Computer.FileSystem.ReadAllText(file)
        If Not MyVer = lastver Then
            updater = MsgBox("New Content available" & vbNewLine & "If you want to download it click yes" & vbNewLine & "" & vbNewLine & "" & vbNewLine & "It probably is a new pet!", vbYesNo)
            If updater = vbYes Then
                Process.Start("http://www.virtualpetstool.webs.com/downloads.html")

            End If
        Else : MsgBox("Program is up to date")
        End If
    End Sub
 
Probeer het eens hiermee:

Plaat deze code onder datgene dat het update process in werking stelt:

Code:
        Dim CheckForNewVersionThread As New Threading.Thread(AddressOf CheckForNewVersion)
        CheckForNewVersionThread.Name = "CheckForNewVersion"
        CheckForNewVersionThread.Start()

Plaats dan deze twee subs (een sub dat controlleerd op een update en een sub dat de nieuwe bestanden download als er een update beschikbaar is):

Code:
    Private Sub CheckForNewVersion()

        'Check if network is available
        If My.Computer.Network.IsAvailable Then

            'Read current version file
            Dim CurrentVersionReader As New StreamReader(Application.StartupPath & "\Version.txt")
            Dim sCurrentVersion As String = CurrentVersionReader.ReadLine : CurrentVersionReader.Dispose()

            'Download online version file
            Dim DownloadVersionFile As New WebClient
            Try : DownloadVersionFile.DownloadFile( PAD NAAR NewVersion.txt HIER", Application.StartupPath & "\NewVersion.txt")
            Catch ex As Exception
                MessageBox.Show("Er is een fout opgetreden tijdens het controleren op een nieuwe versie. De update word bij deze afgebroken." & vbCrLf & _
                            "De fout is:" & vbCrLf & vbCrLf & ex.Message, "Oeps! Foutje...", MessageBoxButtons.OK, MessageBoxIcon.Error) : Exit Sub : End Try

            'Read downloaded version file
            Dim DownloadedVersionReader As New StreamReader(Application.StartupPath & "\NewVersion.txt")
            Dim sDownloadVersion As String = DownloadedVersionReader.ReadLine : DownloadedVersionReader.Dispose()

            'If Downloaded version is higher than current version
            If sDownloadVersion > sCurrentVersion Then
                '...then an update is available

                'Let the user know there's a new version
                If MessageBox.Show("Er is een nieuwe versie van ... beschikbaar:" & vbCrLf & vbCrLf & "Versie " & sDownloadVersion & vbCrLf & vbCrLf & _
                            "Wil je deze nu binnenhalen? Als je ervoor kiest de update nu niet binnen te halen, wordt je deze vraag opnieuw gesteld als je het programma de volgende keer opnieuw start.", "Update beschikbaar", _
                            MessageBoxButtons.YesNo, MessageBoxIcon.Information) = DialogResult.Yes Then


                    'If user wishes to download the new version, download the new file(s) (runs in a seperate thread)
                    Dim DownloadNewVersionThread As New Threading.Thread(AddressOf DownloadNewVersion)
                    DownloadNewVersionThread.Name = "DownloadNewVersion" : DownloadNewVersionThread.Start()

                    'Create a new version file which holds the new version
                    Dim NewVersionFileWriter As New StreamWriter(Application.StartupPath & "\Version.txt")
                    NewVersionFileWriter.WriteLine(sDownloadVersion) : NewVersionFileWriter.Dispose()

                    'Click OK to execute the new version
                    MessageBox.Show("Versie " & sDownloadVersion & " is met success gedownload." & vbCrLf & _
                                    "Klik OK om de nieuwe versie te starten.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information)

                    'Run the new version
                    Process.Start( EXECUTABLE HIER )
                    Application.Exit()

                End If : End If

            'Delete downloaded version file
            File.Delete(Application.StartupPath & "\NewVersion.txt")

        End If

    End Sub

    Private Sub DownloadNewVersion()

        Dim RemoteUrl As String = " PAD NAAR ONLINE DIRECTORY HIER "
        Dim Files() As String = {"MainExecutable.exe"} 'Een array voor alle programma bestanden die gedownload moeten worden
        Dim DownloadClient As New WebClient

        Try
            For Each sFile As String In Files
                File.Move(Application.StartupPath & "\" & sFile, sFile & ".old")
                DownloadClient.DownloadFile(RemoteUrl & sFile, Application.StartupPath & "\" & sFile)
            Next
        Catch : End Try

    End Sub
 
paar vraagjes :)

is deze goed ingevuld?


Code:
  Try : DownloadVersionFile.DownloadFile("http://www.virtualpetstool.webs.com/version.txt ", Application.StartupPath & "\NewVersion.txt")


wat ik hier moet invullen snap ik niet
ik snap dat er een process moet komen maar hoe zorg ik ervoor dat het programma weer start?

Code:
Process.Start("http://www.google.com")
                    Application.Exit()

en dan heb ik deze nog en ik snap het niet want er staan dims in
 

Bijlagen

  • Untitled.jpg
    Untitled.jpg
    33,3 KB · Weergaven: 39
is deze goed ingevuld?

Nee, het moet zo:

Code:
 Try : DownloadVersionFile.DownloadFile("http://www.virtualpetstool.webs.com/NewVersion.txt ", Application.StartupPath & "\NewVersion.txt")

wat ik hier moet invullen snap ik niet
ik snap dat er een process moet komen maar hoe zorg ik ervoor dat het programma weer start?

Hier vul je het pad in naar de nieuwe executable, dus bijvoorbeeld zo:

Code:
                    Process.Start(Application.StartUpPath & \ NaamvanExehier.exe)
                    Application.Exit()

en dan heb ik deze nog en ik snap het niet want er staan dims in

Zet helemaal bovenaan je form:

Code:
Imports System.IO
Imports System.Net
 
Laatst bewerkt:
bedankt het is gelukt :)

heb je code wel flink aangepast, ik wil mensen juist doorverwijzen naar de site :D om daar te kunnen zien wat er nieuw is. :p

import system.net had ik zelf nog gevonden die andere niet dus helemaal top :D

het werkt nu ook trouwens
 
Tof dat tie werkt, heb die code zelf nog niet helemaal kunnen testen, dus dat heb jij al gedaan. :D
 
@xl3igplayer Deze topic is redelijk gedateerd. We mogen aannemen dat deze niet meer actueel is of waarschijnlijk is opgelost. Deze topic wordt gesloten. Tevens dien je een eigen vraag te maken. Het is niet netjes om in een ander zijn of haar vraag jouw probleem aan de orde te stellen. Bovendien is het verwarrend voor de helpers en de oorspronkelijke vragensteller.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan