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] Autoupdater bez zewnętrznych programów.


Crossiik

Rekomendowane odpowiedzi

Opublikowano

 

 

Najbardziej frustrujące jest gdy updater waży więcej niż sama aplikacja a stworzenie porządnego updatera wydaje się trudne, zwłaszcza takiego który będzie szybki, prosty i przyjemny w użytkowaniu.
Jak wiadomo działający program nie może zostać podmieniony, potrzebna jest zewnętrzna aplikacja która zaktualizuje pliki. Przykładem będzie mój projekt Vlaunchera - launchera do gry arma3.


-Krok pierwszy- Aplikacja musi zrozumieć że jest dostępna nowa aktualizacja.

 

Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("http://vlauncher.cba.pl/wersja") 'w tym linku zapisana jest zmienna z nową wersją aplikacji.
        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()
        Dim currentversion As String = Application.ProductVersion
        If newestversion.Contains(currentversion) Then 'aplikacja porównuje wersje programów i w razie potrzeby pyta czy chcemy aktualizować.
        Else
            Dim result As Integer = MessageBox.Show("Dostępna jest nowa wersja programu, czy chcesz ją pobrac?", "caption", MessageBoxButtons.YesNo)
            If result = DialogResult.No Then
            ElseIf result = DialogResult.Yes Then

                aktualizuj            'w razie aktualizacji zajmie się tym oddzielny moduł o nazwie "aktualizuj"
                Me.Close()
            End If
        End If

-Krok drugi- Konfigurowanie i działanie modułu "aktualizuj"

Każdy zapewne miał styczność z batchem, wykorzystajmy go więc do aktualizacji naszej aplikacji bowiem to on będzie pełnił funkcję zewnętrznej aplikacji.

Module aktualizuj
    Sub aktualizuj()
        Dim nazwaupdatera As String = "updater" 'nazwa nasze updatera.
        Dim linkdopliku As String = "https://wordpress.org/plugins/about/readme.txt" 'link do nowego pliku który chcemy podmienić, w moim przypadku .txt
        Dim nazwapliku As String = "test"
        Dim lokalizacjaInstalacji As String = My.Application.Info.DirectoryPath & "\"
        Dim rozszerzenie As String = ".txt"
        Dim richtextbox1 As New System.Text.StringBuilder

        If (Not System.IO.Directory.Exists(My.Computer.FileSystem.SpecialDirectories.Temp & "\" & nazwaupdatera)) Then
            System.IO.Directory.CreateDirectory(My.Computer.FileSystem.SpecialDirectories.Temp & "\" & nazwaupdatera)
        End If

        richtextbox1.AppendLine("@echo off")
        richtextbox1.AppendLine("SET " & Chr(34) & "FILENAME=%temp%\" & nazwaupdatera & "\" & nazwapliku & rozszerzenie)
        richtextbox1.AppendLine("bitsadmin.exe /transfer " & Chr(34) & nazwaupdatera & Chr(34) & " " & linkdopliku & " " & Chr(34) & "%FILENAME%" & Chr(34))
        richtextbox1.AppendLine("Move " & My.Computer.FileSystem.SpecialDirectories.Temp & "\" & nazwaupdatera & "\" & nazwapliku & rozszerzenie & " " & Chr(34) & lokalizacjaInstalacji & nazwapliku & rozszerzenie & Chr(34))
        'richtextbox1.AppendLine("pause >nul")   'powstrzymuje aktualizator przed zamknięciem się po ukończeniu pracy.(pomocne przy wyłapywaniu błędów)

        IO.File.WriteAllText(My.Computer.FileSystem.SpecialDirectories.Temp & "\" & nazwaupdatera & "\" & nazwaupdatera & ".bat", richtextbox1.ToString)
        Process.Start(My.Computer.FileSystem.SpecialDirectories.Temp & "\" & nazwaupdatera & "\" & nazwaupdatera & ".bat")
    End Sub
End Module

-Krok trzeci- Usuwanie śmieci na starcie.

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' nie lubimy śmieci
        If My.Computer.FileSystem.DirectoryExists(My.Computer.FileSystem.SpecialDirectories.Temp & "\" & nazwaupdatera) Then
            System.IO.Directory.Delete(My.Computer.FileSystem.SpecialDirectories.Temp & "\" & nazwaupdatera, True) 'usuwa na starcie stare pliki w folderze Temp
        End If
    End Sub

Pastbin - http://pastebin.com/t5ARpM7B

Opublikowano

Co to za jakiś dziwny pomysł komentowania kodu kolorami? Wrzuć w <> i daj normalne komentarze. Albo chociaż użyj Couriera dla kodu.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Co to za jakiś dziwny pomysł komentowania kodu kolorami? Wrzuć w <> i daj normalne komentarze. Albo chociaż użyj Couriera dla kodu.

Znając niektórych użytkowników wysypie im problem i zaczną się pytania, opisałem która część kodu co wykonuj by można było w łatwy sposób dotrzeć do problemu.

 

I co to za pomysl aby kod wrzucac do richtextboxa zamiast do zmiennej odrazu :O

Zrobiłem by było jak najłatwiej, można zawsze dodać do zmiennej + vb.newline.

Opublikowano

Zrobiłem wszystko jak trzeba ale i tak wyskakują błędy. Krok pierwszy to tyle tych błędów chyba z 10 a w kroku drugim 2... Wklej najlepiej cały kod a z resztą poradzę sobie.

Pomagam na PW (Prywatna Wiadomosc)

▄ . ► KONTAKT .
Wyślij do mnie Prywatną Wiadomość (PW)

►Skype: smith.polska

Opublikowano

Zrobiłem wszystko jak trzeba ale i tak wyskakują błędy. Krok pierwszy to tyle tych błędów chyba z 10 a w kroku drugim 2... Wklej najlepiej cały kod a z resztą poradzę sobie.

Na dole proadnika masz pastbind z kodem(http://www.mpcforum.pl/s/5ba2261)

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...