Timow2
Messages postés1Date d'inscriptionmardi 23 février 2016StatutMembreDernière intervention23 février 2016
-
23 févr. 2016 à 22:40
Senso2003
Messages postés4Date d'inscriptionmardi 7 juin 2016StatutMembreDernière intervention18 août 2016
-
18 août 2016 à 10:08
Bonjour à tous,
Voilà je viens poster une demande d'aide car voilà quelque mois que mon projet est en arrêt.
J'ai codé un updater automatique qui télécharge les mises à jours de mon jeu sur l'ordinateur.
Tout ce passe bien pour les fichiers .exe qui sont téléchargés correctement mais j'ai un problème lorsqu'il s'agit d'un .swf et lorsque je met un chemin de dossier.
Exemple :
- Fichier .exe (Télécharge sans soucis)
- Fichier .swf (Le updater bloque, puis m'indique que le fichier n'existe pas)
- Fichier dans un dossier ; Musique/minecraftaudio.swf (Le updater bloque, puis m'indique que le fichier n'existe pas)
Je ne trouve pas la solution :x 2 mois que je suis bloqué.
Voilà mon bout de code pour la MaJ :
Public Sub GetMaj()
If isWaitUpd = True Then
If loadIntro = True Then
TextBox1.AppendText(vbCrLf & "Version du client : " & RevisionLauncher & ".0.0")
TextBox1.AppendText(vbCrLf & "Recherche de la derniere mise à jour du Client...")
addToLog("Version du client : " & RevisionLauncher & ".0.0", True, New Font("Verdana", 9, FontStyle.Bold), Color.DarkGray, False)
Logs.AppendText(vbCrLf & vbCrLf)
loadIntro = False
End If
Label7.Text = "Recherche de mises à jour du jeu..."
addToLog("• Recherche des dernières mises à jour du jeu...", True, New Font("Verdana", 8, FontStyle.Regular), Color.DarkGray, False)
Logs.AppendText(vbCrLf)
Dim sw As New StreamWriter(Application.StartupPath & "\Cache.html")
Dim getMajSrc = Request_Get(LinkMAJ)
sw.WriteLine(getMajSrc)
sw.Close()
System.Threading.Thread.Sleep(2000)
Try
Dim monStreamReader As New StreamReader(Application.StartupPath & "\Cache.html") 'Stream pour la lecture
majinfo = Split(monStreamReader.ReadToEnd, vbCrLf)
monStreamReader.Close()
Catch ex As Exception
majinfo = Split(getMajSrc, vbCrLf)
End Try
TextBox1.AppendText(vbCrLf & "Préparation de la mise a jour ...")
ProgressBar1.Style = ProgressBarStyle.Continuous
addToLog(" › Préparation de la mise a jour ...", True, New Font("Verdana", 8, FontStyle.Italic), Color.DarkGray, False)
Logs.AppendText(vbCrLf)
System.Threading.Thread.Sleep(2000)
BackgroundWorker3.RunWorkerAsync()
isWaitUpd = False
Else
ProgressBar1.Style = ProgressBarStyle.Blocks
If mfiles.Count = 0 Then
TextBox1.AppendText(vbCrLf & "Aucune mise a jour est necessaire")
TextBox1.AppendText(vbCrLf & vbCrLf & "Le client est à jour.")
Label7.Text = "Mise à jour terminé."
addToLog(" › Le jeu est à jour.", True, New Font("Verdana", 8, FontStyle.Italic), Color.Green, True)
Logs.AppendText(vbCrLf & vbCrLf)
GameReady(True)
Button1.Enabled = True
Exit Sub
End If
If mfiles.Count > 1 Then
TextBox1.AppendText(vbCrLf & mfiles.Count & " fichiers vont être téléchargés !" & vbCrLf)
Label7.Text = mfiles.Count & " fichiers vont être téléchargés !"
addToLog(" › " & mfiles.Count & " fichiers vont être téléchargés !", True, New Font("Verdana", 8, FontStyle.Italic), Color.Orange, False)
Logs.AppendText(vbCrLf)
tdl = mfiles.Count
ProgressBar2.Maximum = tdl
Else
TextBox1.AppendText(vbCrLf & "1 fichier va être téléchargé !" & vbCrLf)
Label7.Text = "1 fichier va être téléchargé."
addToLog(" › " & "1 fichier va être téléchargé !", True, New Font("Verdana", 8, FontStyle.Italic), Color.Orange, False)
Logs.AppendText(vbCrLf)
tdl = "1"
End If
addToLog(" ▫ " & "Téléchargement des fichiers : ", True, New Font("Verdana", 8, FontStyle.Bold), Color.DarkOrange, False)
Logs.AppendText(vbCrLf)
For Each file As String In mfiles
actuFDL = file
Label7.Text = "Téléchargement de : " & file & " (0%)"
TextBox1.AppendText(vbCrLf & "Téléchargement du fichier " & file & "...")
addToLog(" ▪ " & file, True, New Font("Verdana", 8, FontStyle.Italic), Color.DarkGray, False)
Logs.AppendText(vbCrLf)
BackgroundWorker1.RunWorkerAsync(New Object() {LinkUpdater & majinfo(1) & file,
Application.StartupPath & "\" & file})
dlf = dlf + 1
actuDL.Text = dlf & "/" & tdl
ProgressBar2.Value = dlf
While BackgroundWorker1.IsBusy
Application.DoEvents()
End While
If vCancelled Then Exit For
Next
If vCancelled Then
TextBox1.AppendText(vbCrLf & vbCrLf & "Mise a jour annulé !")
addToLog("› " & "Mise a jour annulé !", True, New Font("Verdana", 8, FontStyle.Bold), Color.Red, False)
Logs.AppendText(vbCrLf)
GameReady(True)
Else
My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\versions.txt", majinfo(0), False)
TextBox1.AppendText(vbCrLf & vbCrLf & "Votre jeu est maintenant à jour.")
GameReady(True)
Label2.Text = "Le jeu est à jour ;)"
Logs.AppendText(vbCrLf)
addToLog("› " & "Votre jeu est maintenant à jour.", True, New Font("Verdana", 8, FontStyle.Bold), Color.Green, False)
Logs.AppendText(vbCrLf & vbCrLf)
TimerUpdate.Enabled = True
TimerUpdate.Start()
End If
GameReady(True)
End If
End Sub
et mon backgroundworker qui m'affiche l'erreur :
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim theResponse As HttpWebResponse
Dim theRequest As HttpWebRequest
Try
theRequest = WebRequest.Create(e.Argument(0))
theResponse = theRequest.GetResponse()
Catch ex As Exception
MessageBox.Show("An error occurred while downloading file. Possible causes:" & ControlChars.CrLf &
"1) File doesn't exist" & ControlChars.CrLf &
"2) Remote server error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Dim cancelDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)
Me.Invoke(cancelDelegate, True)
Exit Sub
End Try
Dim length As Long = theResponse.ContentLength
Dim safedelegate As New ChangeTextsSafe(AddressOf ChangeTexts)
Me.Invoke(safedelegate, length, 0, 0, 0) '
My.Computer.FileSystem.CreateDirectory(New IO.FileInfo(e.Argument(1)).DirectoryName)
Dim writeStream As New IO.FileStream(e.Argument(1), IO.FileMode.Create)
Dim nRead As Integer
Dim speedtimer As New Stopwatch
Dim currentspeed As Double = -1
Dim readings As Integer = 0
Do
If BackgroundWorker1.CancellationPending Then
Exit Do
End If
speedtimer.Start()
Dim readBytes(4096) As Byte
Dim bytesread As Integer = theResponse.GetResponseStream.Read(readBytes, 0, 4096)
nRead += bytesread
Dim percent As Short = Math.Max(0, (CLng(nRead) * 100) / Math.Max(1, length))
Try
Me.Invoke(safedelegate, length, nRead, percent, currentspeed)
Catch ex As Exception
Debug.Print("Erreur sur Invoke de type Value")
Exit Do
End Try
If bytesread = 0 Then Exit Do
writeStream.Write(readBytes, 0, bytesread)
speedtimer.Stop()
readings += bytesread
If speedtimer.ElapsedMilliseconds >= 1000 Then
currentspeed = readings / (speedtimer.ElapsedMilliseconds / 1000)
speedtimer.Reset()
readings = 0
End If
Loop
theResponse.GetResponseStream.Close()
writeStream.Close()
If Me.BackgroundWorker1.CancellationPending Then
IO.File.Delete(e.Argument(1))
Dim cancelDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)
Me.Invoke(cancelDelegate, True)
Exit Sub
End If
Dim completeDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)
Try
Me.Invoke(completeDelegate, False)
Catch ex As Exception
End Try
End Sub
Senso2003
Messages postés4Date d'inscriptionmardi 7 juin 2016StatutMembreDernière intervention18 août 20161 18 août 2016 à 10:08
Juste une information qui pourrait vous interessez.
Utilisez plutot dropbox pour le stockage des fichiers mis a jour.
Et tout de code pour une simple mise a jour c'est enorme.
Tu peux plus simplement stocker dans un fichier sur ton dropbox La Version actuelle et les liens de tous les fichiers de mise a jour puis lire ton fichier ligne par ligne sur vb et telecharger chacun des composants.