Member 13711215 Ответов: 2

Скачать файл и обновить программу


Привет,

Я пытаюсь загрузить файл из googledrive, если версия программы ниже, чем фактическая в соответствии с txt-файлом (1.0.0.1) в dropbox. Когда я загружаю файл, метка показывает мне размер файла и индикатор выполнения процесса загрузки, это работает хорошо, но файл не загружается в местоположение. Кто-нибудь знает, почему? Я бы хотел, чтобы это работало: после завершения загрузки программа выходит и запускает загруженную новую версию программы.

Что я уже пробовал:

Dim myCode As Byte()
Dim cesta_souboru As String = "C:\Filip\Etikety\Debug"
Dim file As String = cesta_souboru + "\file.txt"
Dim wc As WebClient

Private Sub posli(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles check_update.Click
    wc = New WebClient()
    Dim filename = "file.txt"
    Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("https://www.dropbox.com/s/uywfkhi7wdqa4en/Version.txt?dl=1")
    Dim response As System.Net.HttpWebResponse = request.GetResponse()
    Dim sr As System.IO.StreamReader = New System.IO.StreamReader(response.GetResponseStream())

    Dim newestversion As String = sr.ReadToEnd()
    MsgBox(newestversion)
    Dim currentversion As String = Application.ProductVersion
    MsgBox(currentversion)
    If newestversion.Contains(currentversion) Then
        MsgBox("Používáte aktuální verzi")
    Else
        MsgBox("Nová verze programu je ke stažení, aktualizuji ji pro vás.")
        Try
            System.IO.File.Delete(file)
        Catch ex As UnauthorizedAccessException
        End Try

        AddHandler wc.DownloadProgressChanged, AddressOf DownloadProgressChanged
        'AddHandler wc.DownloadDataCompleted, AddressOf DownloaddataCompleted
        wc.DownloadDataAsync(New Uri("https://drive.google.com/open?id=0B_pejckobLScTWJhUk9jasfhjk"), cesta_souboru + "\" + filename)

    End If
End Sub
Private Sub DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
    ProgressBar1.Value = e.ProgressPercentage
    lbl_prog_percent.Text = e.ProgressPercentage.ToString() + "%"
    lbl_received.Text = String.Format("{0} MB/s / {1} MB/s", (e.BytesReceived / 1024D / 1024D).ToString(), (e.TotalBytesToReceive / 1024D / 1024D).ToString("0.00"))
End Sub
Private Sub DownloaddataCompleted(ByVal sender As Object, ByVal e As DownloadDataCompletedEventArgs)
    RemoveHandler wc.DownloadProgressChanged, AddressOf DownloadProgressChanged
    RemoveHandler wc.DownloadDataCompleted, AddressOf DownloaddataCompleted
    ProgressBar1.Value = 0
    If e.Error IsNot Nothing Then
        MessageBox.Show(e.Error.Message)
    ElseIf e.Cancelled Then
        MessageBox.Show("Download cancelled by the user")
    Else
        'myCode = e.Result
    End If
    Dim URL As String = DirectCast(e.UserState, String)
    MessageBox.Show(URL)
    Timer5.Start()


End Sub
Private Sub Timer5_Tick(sender As Object, e As EventArgs) Handles Timer5.Tick
    Process.Start(cesta_souboru + "\iMontix.exe")
    Application.Exit()

End Sub

CHill60

Вы пробовали его отладить?

Member 13711215

Привет, да, файл был найден, размер совпадает, и путь для загрузки тоже есть. Я редактирую DownloaddataCompleted в DownloadstringCompleted

2 Ответов

Рейтинг:
2

RickZeeland

Я боюсь, что DropBox ужесточил свою безопасность в прошлом году, и теперь использовать URL-адрес загрузки уже не так просто. Может быть, вы можете попробовать использовать их API или использовать другого поставщика.


Рейтинг:
2

Dave Kreskowiak

Вдобавок к тому, что сказал Рик, ваш код также ловит исключения и ничего с ними не делает:

Try
    System.IO.File.Delete(file)
Catch ex As UnauthorizedAccessException
End Try

Это скрывает исключение, которое вы ловите, поэтому, если удаление действительно не удается, вы понятия не имеете, что оно не удалось, и не получаете никакого намека на то, почему. Если у вас нет действительно веской причины для этого, глотать исключения, подобные этому, - плохая идея.