Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TuT] Jak napisać auto-updater do swojego programu


Rekomendowane odpowiedzi

Opublikowano

Witam, chciałem Wam pokazać jak napisać auto-updater do swojego programu.

[Krok 1]

  • Stwórz nowy projekt o nazwie np. Update. Ma być on oddzielny od programu, którego chcesz update'ować.
  • Otwórz Form1 i kliknij na okienko dwa razy.

Wygeneruje się nam taki kod:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End sub 

Deklarujemy najpierw WebClient przed Form1_Load i dodajemy Imports System.Net.WebClient przed klasą Form1

    Public WithEvents Update As New WebClient 'Public i WithEvents oznaczają, że deklaracja jest publiczna oraz z eventami.

W Form_Load tworzymy pętlę if, która będzie sprawdzała czy plik pobrany już istnieje, jeżeli tak to program usunie plik.

        If My.Computer.FileSystem.FileExists("TwójProgram.exe") Then 'TwójProgram.exe to plik, który ma się zaktualizować
            My.Computer.FileSystem.DeleteFile("TwójProgram.exe")
        End If

Tworzymy blok Try Catch, aby pobrać nową wersję programu.

        Try
            update.DownloadFileAsync(New Uri("http://twojastrona.pl/TwójProgram.exe"), "TwójProgram.exe") 'Ta linia jest odpowiedzialna za pobieranie pliku
        Catch ex1 As Exception
            MsgBox("Błąd przy pobieraniu")
        End Try

Tworzymy event DownloadFileCompleted dla WebClienta, którego zadekralowaliśmy pod nazwą 'Update'. Wygeneruje nam się taki kod:

    Private Sub update_DownloadFileCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles update.DownloadFileCompleted

    End Sub

W nim tworzymy pętlę if, która będzie sprawdzała czy plik jest pobrany czy nie.

        If System.IO.File.Exists("TwójProgram.exe") Then

            Process.Start("TwójProgram.exe") 'Ta linijka jest odpowiedzialna za otworzenie pliku, którego pobraliśmy.

        End If
        Me.Close() 'Ta linia jest odpowiedzialna za zamknięcie Updatera po ukończeniu

[Krok 2]

  • Uruchom updater w Visual Studio po czym przejdź do folderu z Updaterem domyślnie Dokumenty > Visual Studio > Projects > Update > bin > Debug
  • Wrzuć do ftp update.exe w folderze Debug.
  • W ftp stwórz plik tekstowy i wpisz w nim aktualną wersję swojego programu w moim przypadku to wersja przeglądarki 5.3.17.32
  • Jeżeli będziesz chciał zaktualizować swój program to wpisz w pliku txt nową wersję programu np. 6.4.18.53 i zmień na tą samą wersję w Visual Studio > Project > Properties > Application > Assembly Information.

[Krok 3]

W swoim programie stwórz nową metodę o nazwie np. checkForUpdates, a w nim blok Try Catch.

 Public WithEvents Update As WebClient = new WebClient
Public Sub checkForUpdates()
        Try
            Dim aktualnawersja = My.Application.Info.Version.ToString 'String, który sprawdza wersję Twojego programu
            Dim nowawersja = web.DownloadString("http://strona.com/wersja.txt") 'String, który sprawdza wersję nowego programu w pliku wersja.txt na FTP
            If AktualnaWersja < NowaWersja Then 'Jeżeli aktualnawersja  jest starsza niż nowa wersja wtedy...
                Me.Hide() 'Schowaj program
                Update.DownloadFileAsync(New Uri("http://strona.com/update.exe"), Application.StartupPath & "\update.exe") 'Pobierz updater
            Else
            End If
        Catch : End Try
    End Sub

Tworzymy event DownloadFileCompleted dla WebClienta, którego zadekralowaliśmy pod nazwą 'Update'. W nim tworzymy pętle if, która będzie sprawdzać czy plik update.exe pobrał się.

    Private Sub Update_DownloadFileCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles Update.DownloadFileCompleted
        If File.Exists(Application.StartupPath & "\update.exe") Then
                Process.Start(Application.StartupPath & "\update.exe")
                Me.Close()
        End If
    End Sub

Zapisujemy projekt i testujemy.

 

.

Opublikowano

Albo mi się wydaje albo w kodzie masz kasowanie pliku, który jest aktualnie wykonywany o.O

Jeżeli mam program na pulpicie i go włączę to jak mam go skasować i nadpisać?

 

Updater robi się jako oddzielny mini-program.

Opublikowano

to dopisz to do tego poradnika bo niektórzy będą robić to na głównym projekcie (w końcu napisałeś autoupdater do własnego programu)

Poza tym rozumiem, że się starasz itp. ale zrób jakiś ciekawszy poradnik, autoupdaterów już na MPC widziałem tyle, że...

  • 11 miesięcy temu...
  • 2 miesiące temu...
  • 4 tygodnie później...
  • 6 miesięcy temu...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...