24/09/2023

[CSHARP - VISUAL BASIC] AUTO UPDATER

Dưới đây là tóm tắt nhanh chức năng của mã này

[CSHARP - VISUAL BASIC] AUTO UPDATER
  1. Kiểm tra phiên bản hiện tại với phiên bản mới nhất được lưu trữ trên hosting or github (có thể là bất kỳ trình xem văn bản thô nào)
  2. Nếu chúng không khớp, nó sẽ mở trình cập nhật rồi đóng chương trình hiện tại (chương trình lỗi thời)
  3. Trình cập nhật sẽ xóa phiên bản cũ rồi tải xuống phiên bản mới.
  4. Sau khi tải xuống, nó sẽ đóng và mở phiên bản cập nhật của công cụ gốc.

FULL CODE APPLICATION :
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;

namespace Updater
{
    class Program
    {
        // Credits to LTPF
        static void Main(string[] args)
        {
            WebClient wc = new WebClient();
            if (File.Exists("AutoUpdater.exe")) // Nên là phiên bản lỗi thời..
                File.Delete("AutoUpdater.exe");
            File.WriteAllBytes("AutoUpdater.exe", wc.DownloadData("http://domain.xxx/AutoUpdater.exe")); // Tạo và ghi một tập tin khi nó đọc từ phiên bản mới nhất.
            Process.Start("AutoUpdater.exe"); // Khởi chạy chương trình gốc.
            Console.WriteLine("Update downloaded!\n");
        }
    }
}

Đối với URL domain.xxx mà tôi đã sử dụng máy chủ của mình, tôi không biết bất kỳ nơi lưu trữ tệp trực tuyến nào mà bạn chỉ cần nhập URL vào và nó sẽ tải xuống ngay lập tức.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Diagnostics;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string currentVersion = "1.0.0.0";

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "Version: " + currentVersion;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            WebClient wc = new WebClient();
            string newVersion = wc.DownloadString("https:\\(trình xem văn bản thô chỉ chứa phiên bản, e.g. 1.0.0.0)"); // Tải xuống phiên bản mới nhất.
            if (currentVersion != newVersion)
            {
                if (!File.Exists("Updater.exe")) // Kiểm tra xem bản cập nhật tập tin không tồn tại hoặc đã được đổi tên.
                    MessageBox.Show("Không tìm thấy trình cập nhật! Vui lòng tải lại chương trình!");
                else
                {
                    Process.Start("Updater.exe"); // Khởi chạy trình cập nhật nếu tệp KHÔNG tồn tại.
                    Close();
                }
            }
            else
            {
                MessageBox.Show("Cập nhật!");
            }
        }
    }
}

Và bên dưới là đoạn mã mà mình chuyển sang ngôn ngữ lập trình .NET
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks
Imports System.Windows.Forms
Imports System.Net
Imports System.IO
Imports System.Diagnostics

Namespace WindowsFormsApp1
    Public Partial Class Form1
        Inherits Form

        Public Sub New()
            InitializeComponent()
        End Sub

        Private currentVersion As String = "1.0.0.0"

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
            label1.Text = "Version: " & currentVersion
        End Sub

        Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
            Dim wc As WebClient = New WebClient()
            Dim newVersion As String = wc.DownloadString("https:\(trình xem văn bản thô chỉ chứa phiên bản, e.g. 1.0.0.0)")

            If currentVersion <> newVersion Then

                If Not File.Exists("Updater.exe") Then
                    MessageBox.Show("Không tìm thấy trình cập nhật! Vui lòng tải lại chương trình!")
                Else
                    Process.Start("Updater.exe")
                    Close()
                End If
            Else
                MessageBox.Show("Cập nhật!")
            End If
        End Sub
    End Class
End Namespace


Chúc các bạn thành công với thủ thuật hay này nhé. Để tạo riêng cho mình một chương trình và có thông báo cập nhật phiên bản mới nếu có thay đổi gì từ hệ thống nhé.

8 comments:

  1. A đang thử áp dụng vào tools post nhưng có điều ở mục phiên bản lại để trong tool vậy rất dễ bị bẻ khóa đó e, nếu e tích hợp được quản lý cập nhật phiên bản mới từ sever máy chủ nữa thì ok hơn đó e.

    ReplyDelete
    Replies
    1. Điều đó đơn giản mà bạn, bên blog m` có chia sẽ đoạn code thông báo cập nhật phiên bản đó, nhưng nó chỉ có thông báo và bắt buộc link tải phiên bản mới nhất về để cập nhật nhé. nhưng nó bị hạn chế đó là k có dữ liệu hay bộ cài đặt ứng dụng như nhiều chương trình khác, nó chỉ là phiên bản demo cho người dùng biết có bản cập nhật mới nhất thôi, và cũng lưu ý luôn là nó rất dễ bị bẻ khóa những decode bẻ khóa link update trong chương trình . :D

      Delete
    2. k điều m nói ở đây là thông báo và tự động update chương trình và khởi động lại chương trình ấy, nó tự động thay thế file củ và cập nhật thành file mới đó bạn, :D chứ để thông báo có bản cập nhật thì mình biết r` bạn ạ.

      Delete
    3. hi 2 a, bài viết này e copy chứ e chưa có nhiều time để tìm hiểu nguyên lý hoạt động như thế nào, nhưng theo kiến thức e hiểu đc, nếu chương trình cập nhật phiên bản như nhưng chương trình kia thì mình phải biết thư mục chưa file đó ở đâu và nó sẽ tự động update và ghi lên phiên bản hiện tại và sẽ tự động reset lại phiên bản hiện tại lên phiên bản mới để người dùng không mất công quá nhiều trong việc này 2 a nhé. :D

      Delete
    4. thì ở code trên với trình của a chưa hiểu rỏ lắm, nhưng theo a biết thì code trên còn tùy biến nữa e. Nhưng sao cũng ok r, để tìm hiểu thêm cách thức đó e (y)

      Delete
  2. hey e, mình đã làm theo cách khác ok hơn nhé, nó có form download hiện ra trên app chứ k phải bắt m` download từ trình duyệt web nữa nhé (nhưng bộ code này cần phải mã hóa tốt chứ các debug có thể phá để chèn link tải virus vào trong app là mất uy tính của một coder r` đấy), a đang tìm hiểu nên k tiện share e nhé, có gì a hỏi e tiếp về việc tích hợp và nhiều thứ khác

    ReplyDelete
  3. tốt đó e, nhưng khuyết điểm đó là nó sẽ mờ website ra để tải bản cập nhật, không thực hiện trực tiếp trên chương trình luôn nên cũng hơi bất tiện cho người dùng, nếu e tích hợp việc cập nhật vào trong app liuôn sẽ hay hơn e nhé. :D

    ReplyDelete
    Replies
    1. e gửi chị, bài viết e vừa cập nhật chị tìm hiểu và áp dụng xem có như chị mong muốn k nhé. https://www.hung.pro.vn/2024/04/c-auto-update-application-winform.html

      Delete

TỔNG LƯỚT TRUY CẬP