Update voor een programma

Status
Niet open voor verdere reacties.

Luuknl

Terugkerende gebruiker
Lid geworden
29 jan 2010
Berichten
1.193
Ik ben bezig met deze video te volgen voor een auto updater voor mijn programma maar nu heb ik een probleem: [video=youtube;WPS-Mcz76V4]http://www.youtube.com/watch?v=WPS-Mcz76V4&feature=related[/video]

En dit is de code
Code:
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        Label1.Text = "Checking for updates..."
        WebClient1.DownloadFileAsync(New Uri("www.mftpfaa.webs.com/version.txt"), "version.txt")
    End Sub

    Private Sub WebClient1_DownloadFileCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles WebClient1.DownloadFileCompleted
        Dim read As String = My.Computer.FileSystem.ReadAllText("version.txt")
        If Not read = "1.00" Then
            If read = "" Then
                Label1.Text = "Could not check for updates. Try later again"
            Else
                Label1.Text = "Newer version available (" & read & ")"
            End If
        End If
    End Sub
End Class

Maar als ik het uitvoer geeft hij deze fout: Ongeldige URI: de indeling van de URI kan niet worden bepaald en dat hoort bij deze regel: WebClient1.DownloadFileAsync(New Uri("www.mftpfaa.webs.com/version.txt"), "version.txt")

Wat doe ik fout??
 
Zet er http:// voor.
Dus:
Code:
WebClient1.DownloadFileAsync(New Uri("www.mftpfaa.webs.com/version.txt"), "version.txt")
Word:
Code:
WebClient1.DownloadFileAsync(New Uri("[COLOR="red"]http://[/COLOR]www.mftpfaa.webs.com/version.txt"), "version.txt")
 
Ohja van die simpele dingen vergeet je soms. (Komt doordat google chrome http:// weglaat :() maar oké ;)
Mag ik gelijk vragen waar hij het opslaat? Want ik volg ook alleen maar die tutorial. Maar waar slaat hij hem op, weet jij dat toevallig?:D

Update: Het lijkt alsof hij blijft hangen bij "Checking for updates..." komt dat misschien doordat www.webs.com geen echte hoster is?
 
Hij zet de file op dezelfde plaats waar ook de exe staat, in de debug folder of in de release folder. Dat is prima zo, dat hoef je niet aan te passen.

De reden dat het net lijkt dat het programma vastloopt is best ingewikkeld uit te leggen, maar het komt erop neer dat de thread waar het downloaden onder draait gewoon zn werk doet maar kan verder niet de userinterface 'repainten' (verversen).
Om dat tegen te gaan kun je een BackGroundWorker component gebruiken. Deze zorgt ervoor dat het downloaden op een andere thread draait waardoor het je verder de userinterface gewoon kan blijven gebruiken.

Heb je ooit eerder gebruik gemaakt van een BackGroundWorker?
 
Nee. Vooral niet omdat het dit keer echt een alleen staand project is, waarbij ik dus nog niet iets anders gebruik als gewone programma...

Hoe werkt dat dan?:D
 
Plaats een BackGroundWorker component op je form. Deze vind je in de toolbox onder 'Components'. De BGW verschijnt dan in tray area onder je form.
Vervolgens klik je em aan en kijk je rechts bij de Properties. Je ziet daar een knop met een afbeelding van een oranje bliksempje. Klik erop.
Je ziet nu 3 verschillende events staan. Dubbelklik op DoWork. In je code word nu een DoWork subroutine klaargezet. Verplaats de WebClient.Download code naar deze sub.

Onder button1 zet je nu:
BackGroundWorker1.RunWorkerAsync
op de plaats waar eerst WebClient.Download... heeft gestaan.

En dat moet alles zijn. Ik type dat uit m'n hoofd en heb het niet getest, maar het zou moeten werken.
 
Je kan het ook op deze manier proberen :) Works fine here ^^

PHP:
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim t As New Threading.Thread(AddressOf Upd8)
        t.Start()
    End Sub

    Private Sub Upd8()
        Dim c As New Net.WebClient
        c.DownloadFile("http://www.mftpfaa.webs.com/version.txt", "version.txt")
    End Sub
 
Dat kan ook, maar dan wel zonder de code op regel 7 omdat Luuknl al een WebClient component heeft geplaatst met de naam WebClient1.
Regel 8 moet dan zijn WebClient1.DownloadFileAsync( etc...

Je wilt hem niet in de war brengen, lijkt me. :)
 
Nee in de war raken doe ik liever niet :)
Kan je me ook uitleggen wat deze regels doen?
Wat doet: Dim t As New Threading.Thread(AddressOf Upd8)
Wat doet: t.Start()

En wat doen deze zinnen:
Private Sub Upd8()
Dim c As New Net.WebClient
c.DownloadFile("http://www.mftpfaa.webs.com/version.txt", "version.txt")

Dan LEER ik het namelijk ook :)
 
Ik ben erachter gekomen dat hij het programma wel binnen haalt (naar de map waar het project instaat als je hem bouwt. maar bij de regel van readalltext gaat het dus mis.... Iemand een oplossing daarvoor??
 
Het is wel handig om erbij te vermelden wat er precies misgaat, wat voor foutmelding je krijgt.
 
Geen, dat is het juist. Want ik had even 2 apparte knoppen gemaakt, en toen met de verkenner naar de .exe van het programma gegaan (bin/debug) en toen klikte ik op de eerste knop. Dan die zie je dat hij het bestand binnenhaalt als version.txt dat is goed. maar als ik dan op de 2de knop drukte (read gebeuren, dat is mijn eigen script) dan doet hij niets. Het van CaptainBri werkt ook niet. Hij haalt het wel binnen, maar het lezen gaat niet...
 
Als ik alles direct acther elkaar zet, krijg je dus deze code:
Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        Label1.Text = "Checking for updates..."
        WebClient1.DownloadFileAsync(New Uri("http://mftpfaa.webs.com/version.txt"), "versiefile.txt")
        Dim read As String = My.Computer.FileSystem.ReadAllText("versiefile.txt")
        MsgBox("Hello")
        If Not read = "1.52" Then
            If read = "" Then
                Label1.Text = "Could not check for updates. Try later again"
            Else
                Label1.Text = "Newer version available (" & read & ")"
            End If
        End If
    End Sub

Dan krijg ik deze foutmelding: Kan geen toegang krijgen tot het bestand C:\Users\Luuk\Documents\Visual Studio 2010\Projects\Programma updater\Programma updater\bin\Debug\versiefile.txt omdat het wordt gebruikt door een ander proces.
Dus die word dan denk ik nog even gebruikt voor de webclient1
 
Probeer eens in plaats van "DownloadFileAsync" "DownloadFile" te maken, kijken of hij het dan wel doet :)

Enne, als je de text wilt hebben die in het update bestandje staat (vanaf de server) kan je het beste "WebClient.DownloadString" gebruiken, daarmee krijg je meteen het cijfer (1.52 oid) terug.
 
Laatst bewerkt:
Met downloadString download hij hem in ieder geval sneller, maar hij blijft weer haken bij het lezen...
 
Probeer het zo eens:

PHP:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        Label1.Text = "Checking for updates..."
        Dim read As String = WebClient1.DownloadString("http://mftpfaa.webs.com/version.txt")
        MsgBox("Hello")
        If Not read = "1.52" Then
            If read = "" Then
                Label1.Text = "Could not check for updates. Try later again"
            Else
                Label1.Text = "Newer version available (" & read & ")"
            End If
        End If
    End Sub
 
Laatst bewerkt:
Wat is daar anders aan? Wat is het verschil downloadfile en downloadfileasync? zal het thuis proberen
 
Ik zal kijken of dat wel lukt. maar hoe komt de code er dan uitte zien?
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan