Hướng dẫn viết Auto Update cho chương trình

Một chương trình thường không thể thiếu tính năng kiểm tra và cập nhật phiên bản mới. Bài viết này sẽ hướng dẫn các bạn viết một auto check update đơn giản cho chương trình.
Auto Check Update sẽ có nhiệm vụ check phiên bản mới, nếu phiên bản hiện tại của chương trình cũ hơn thì thông báo người dùng.




📕 KIẾN THỨC CẦN NẮM

Các kiến thức cơ bản về AutoIT cùng kiến thức Internet. Ở tutorial này chúng ta sẽ sử dụng các kiến thức có liên quan đến:
- INI File, InetGet, cơ bản về biến, hàm trong AutoIT
- Cách upload 1 file lên Google Drive dưới dạng public (hoặc có thể sử dụng host khác)


💡 CƠ CHẾ AUTO CHECK UPDATE

Hầu hết các tính năng Auto Check Update đều có chung 1 cơ chế, đó là nhận dữ liệu từ máy chủ (dữ liệu có thể bao gồm phiên bản mới nhất cùng các thông tin khác về nó) và tiến hành so sánh với phiên bản hiện tại của chương trình rồi đưa ra thông báo xin ý kiến người dùng có hay không update.
Các bạn có thể hình dung 1 Auto Check Update đơn giản qua cơ chế sau:
Cơ chế Auto Check Update đơn giản

🚀 LET'S DO IT

Trước tiên, chúng ta cần xác định 2 đối tượng cần xử lý.

  1. Thứ nhất là máy chủ để chương trình tải thông tin về, ở đây tôi sẽ ví dụ sử dụng Google Drive làm host.
  2. Thứ hai là chương trình auto check update từ thông tin máy chủ đó.


Bước 1: Máy chủ. Đầu tiên, tôi sẽ tạo 1 file INI tên Setting.ini có dạng như sau:

[MyProgram]
Version=1.0
Date=20/3/2016
LinkUpdate=http://opdo.top
Trong đó là những thông tin mới nhất về chương trình như key Version là phiên bản mới nhất, cùng ngày cập nhật và link tải.
Tiếp theo, nhiệm vụ của chúng là đưa nó lên một host cố định để chương trình có thể tải về lấy thông tin. Tại sao lại phải cố định host? Vì chương trình của bạn sẽ không thể nào tự hiểu bạn đã đổi 1 host mới, vì vậy hãy cân nhắc chọn 1 host cố định cho chương trình.
Chúng ta chọn Google Drive và vì vậy tôi Upload file INI này vào một foder Drive của tôi (ở đây ví dụ file Setting.ini của tôi nằm ở MySoft/Setting.ini). Chọn chế độ Share Public cho folder đó.
Chuyển file về chế độ public để chương trình có thể truy cập
Kế tiếp, chúng ta phải lấy direct link cho file INI trong thư mục đó. Tại sao lại phải lấy Direct Link? Vì chương trình của bạn sẽ không tải được file bằng link public mà Google Drive cung cấp.
Cách lấy Direct Link. Đầu tiên ở Liên kết chia sẻ, bạn lấy phần ID của folder.
Lấy phần ID của Folder mà bạn set public
Vậy thì đường dẫn Direct Link của bạn sẽ là:
https://googledrive.com/host/<ID>/<Tên file>
Ví dụ, folder MySoft (folder chứa file Setting.ini) của tôi có ID là: 0B7ji-w0T3os-OE1XX2VCTl9uUkU
Thì link tải Setting.ini sẽ là:
https://googledrive.com/host/0B7ji-w0T3os-OE1XX2VCTl9uUkU/Setting.ini
Vậy là chúng ta đã hoàn tất xong phần host. Chúng ta chỉ cần cho chương trình tải file INI này về và so sánh mà thôi.

Bước 2: Tải thông tin. Chúng ta dùng InetGet để tải file về và lưu tại thư mục chứa mã nguồn với tên Update.ini

InetGet("https://googledrive.com/host/0B7ji-w0T3os-OE1XX2VCTl9uUkU/Setting.ini",@ScriptDir&"\Update.ini",1)


Bước 3: So sánh phiên bản. Sau khi đã có file INI rồi, ta chỉ việc lấy thông tin phiên bản mới nhất của nó ra để so sánh với phiên bản hiện tại của chương trình. Ta dùng IniRead _VersionCompare để so sánh hai phiên bản.

#include <Misc.au3>
$Version = '1.0'
$new_Version = IniRead(@ScriptDir&"\Update.ini","MyProgram","Version",-1) ; trả về giá trị -1 nếu không tìm thấy key Version
if _VersionCompare ( $new_Version, $Version ) = 1 Then
 ; code khi có phiên bản mới
EndIf
Trong đó, $Version = '1.0' chính là phiên bản của chương trình đang check update, $new_Version là biến mà Iniread trả về dữ liệu phiên bản mới nhất đọc được từ file INI lấy từ host.

Bước 4: Thông báo cập nhật. Chúng ta sẽ thông báo hỏi người dùng bằng Msgbox có cập nhật hay không (hoặc không có cập nhật mới). Nếu người dùng đồng ý cập nhật, ta sẽ chuyển người dùng đến trang tải.

if _VersionCompare ( $new_Version, $Version ) = 1 Then
 ; code khi có phiên bản mới
 Local $link_update = IniRead(@ScriptDir&"\Update.ini","MyProgram","LinkUpdate",'www.opdo.top') ;  trả về giá trị www.opdo.top nếu không tìm thấy
 Local $date_update = IniRead(@ScriptDir&"\Update.ini","MyProgram","Date",'')
 If MsgBox(4+64,"Thông báo","Có phiên bản mới "&$new_Version&' cập nhật ngày '&$date_update&'. Bạn có muốn cập nhật?') = 6 Then ShellExecute($link_update) ; mở link update nếu người dùng chọn Yes
Else
 MsgBox(64,'Thông báo','Không có phiên bản mới')
EndIf

Vậy chúng ta cơ bản đã hoàn tất một Auto Check Update cho chương trình. Bạn có thể tham khảo code mẫu tại đây.

Xin chào, mình là opdo - một đứa mê những dòng code vô tận. Rất cám ơn vì bạn đã ghé thăm blog của mình ^^. Hi vọng được bạn ủng hộ để blog mình phát triển hơn

Share this

Related Posts

Previous
Next Post »

8 nhận xét

nhận xét
lúc 20:21 28 tháng 4, 2016 delete

cám ơn bạn đã quan tâm ^^

Reply
avatar
lúc 18:27 14 tháng 5, 2016 delete

Anh ơi ko có Func _VersionCompare

Reply
avatar
lúc 23:53 14 tháng 5, 2016 delete

_VersionCompare của thư viện Misc.au3
Em thêm dòng này ở đầu script nha
#include

Reply
avatar
lúc 18:02 24 tháng 12, 2016 delete

Lấy code ở đâu vậy bạn?

Reply
avatar