- Program1.exe 20150224143200 152021
- data.txt 20150224143200 3205
Tác giả: ThuongBat
Cấp độ bài viết: Khó
Tóm tắt: Thêm tính năng tự động Update (cập nhật) cho chương trình của bạn
I. Đặt vấn đề:
Tự động update chương trình là một tính năng không thể thiếu đối với 1 phần mềm chuyên nghiệp. Bởi vì:
- 1. Dù bạn có cẩn thận đến đâu, việc chương trình mắc lỗi là khó tránh khỏi. Bạn cần phải đưa ra các bản vá lỗi để sửa chữa các sai lầm đó
- 2. Theo thời gian các quy định, luật của nhà nước, của các đối tác với bạn có thay đổi. Chương trình của bạn cần phải sửa để hoạt động đúng luật của nhà nước, đúng quy định của đối tác
- 3. Theo thời gian, các tính năng cần phải liên tục được sửa đổi, nâng cấp để tạo ra sự tiện dụng cho khách hàng
- 4. Còn hàng tá các lý do khác nữa mà bạn không thể không cập nhật chương trình của mình
Để làm chương trình của bạn tự động cập nhật được, bạn bắt buộc phải có 1 máy chủ web. Đây sẽ là nơi chứa các bản update của bạn. Bạn có thể sử dụng máy chủ riêng, hoặc host + domain thuê cũng được nhưng nên tính đến khả năng thuê dài hạn. Nếu một ngày host thuê của bạn hết hạn, các chương trình sẽ không biết phải cập nhật phiên bản từ đâu.
III. Bắt đầu làm cập nhật:
(Lưu ý các bạn là mình đang hướng dẫn các bạn làm trên .NET. Các ngôn ngữ khác mình sẽ không bàn ở đây)
Có thể có rất nhiều cách cập nhật chương trình, nhưng hiện tại mình mới biết sử dụng 3 cách. Mình tạm thời phân chia 3 cách đó theo nguyên lý hoạt động của chúng như sau (Đây là cách phân chia theo chủ quan của mình)
- 1. Cập nhật tự động: vâng, cách này thực sự là tự động theo đúng nghĩa của nó. Trong chương trình của bạn sẽ không cần 1 chút code nào để kiểm tra xem khi nào thì có phiên bản mới, tải phiên bản mới về như thế nào, cài nó lên máy khách như thế nào. Tất cả việc bạn cần làm là code cho tốt phần xử lý chính của chương trình, dịch nó, và đưa nó lên mạng. Microsoft sẽ thay bạn làm tất cả phần cập nhật. Trước kia Google Chrome cũng đã làm theo cách này. Bây giờ thì hình như nó đã bỏ rồi, tuy nhiên nếu bạn vẫn muốn sử dụng nó thì cũng vẫn chưa muộn. Công nghệ này thực sự là vẫn chưa lỗi thời, vì rằng Visual Studio 2012 vẫn còn hỗ trợ nó khá tốt.
- + Ưu điểm: thực hiện nhanh và đơn giản. Đỡ phải đau đầu vì mấy cái vụ update, giúp bạn dành nhiều thời gian hơn cho chương trình chính
- + Nhược điểm:
- - mỗi lần bạn cho ra lò phiên bản mới, toàn bộ các file (kể cả các file chả có thay đổi gì) sẽ được đưa lên máy chủ web và lại được tải toàn bộ về ở phía khách hàng. Sẽ tốn kha khá thời gian cho việc tải lên và tải về. Vì vậy cách này không nên áp dụng cho các chương trình có dung lượng file lớn
- - Chương trình làm theo kiểu này sẽ không được cài đặt vào Program Files như đa số các chương trình khác mà bạn thấy. Thay vào đó nó sẽ nằm trong một thư mục ở C:\Users\<tên user> (đối với Win7 trở lên) và trong C:\Documents And Settings\<tên user> đối với WinXP. Điều này có thể sẽ gây khó chịu chút ít cho bạn nếu muốn mở thư mục làm việc của bạn ra (ở trên máy khách) và tìm tòi 1 số thứ như: nhật ký lỗi, chỉnh sửa chuỗi connection, chỉnh sửa setting gì đó trong app.config... Tuy nhiên, nếu bạn làm tốt chương trình của mình thì sẽ chả bao giờ bạn cần phải quan tâm xem chương trình sẽ được cài đặt ở đâu trên máy khách.
- - Cách này sẽ bị hạn chế nếu bạn làm với 1 số công cụ đã Cr*ck (cụ thể là mình đã từng bị lỗi với bộ công cụ DevXpress). Tuy nhiên, việc cr*ck các bộ công cụ để sử dụng là việc làm sai trái nên đây chưa thực sự là một hạn chế đáng kể của cách Update này.
- 2. Cập nhật bán tự động: Là chương trình của bạn phải tự kiểm tra xem khi nào thì có phiên bản mới. Nếu có phiên bản mới thì tải nguyên cái file cài đặt (file đã đóng gói cho chương trình của bạn) về máy và chạy nó lên. Còn việc gỡ chương trình cũ ra khỏi máy và cài chương trình mới vào như thế nào thì nguyên cái file đóng gói đó nó đã giúp bạn rồi. Như vậy khoảng 1 nửa công đoạn trong quá trình Update sẽ do bạn tự quản lý (tuy nhiên cũng có 1 số công cụ hỗ trợ giúp cho việc này của bạn đỡ vất vả đi nhiều). Đây là cách mà tôi hay sử dụng. Nó không quá khó và cũng không bị hạn chế nhiều như cách trên. Bạn có thể thấy Notepad++ cũng đang sử dụng cách này.
- + Ưu điểm:
- - Chương trình được cài vào Program Files, cấu trúc thư mục rõ ràng, dễ cho bạn tìm lại nếu chẳng may cần sửa trực tiếp cái gì đó
- - Không bị hạn chế với các công cụ phi pháp mặc dù mình không khuyến khích các bạn sử dụng phi pháp các công cụ của người ta
- + Nhược điểm:
- - Phiên bản mới vẫn có dung lượng lớn vì nó vẫn chứa tất cả các file liên quan đến chương trình của bạn
- - Mỗi lần có phiên bản mới là khách hàng lại phải chạy qua 1 lần quá trình Setup
- + Ưu điểm:
- 3. Cập nhật thủ công: Có thể có bạn sẽ thắc mắc: đã cập nhật tự động rồi lại còn thủ công nữa là sao? Vâng, mình xin giải thích thủ công ở đây là thủ công đối với bạn(vì bạn phải làm mọi thứ) còn với khách hàng thì nó vẫn là tự động vì chương trình của bạn đã làm thay họ rồi. Với cách này, bạn sẽ phải làm tất cả từ việc kiểm tra xem khi nào thì có bản mới, khi nào thì cần tải nó về, tải như thế nào và cập nhật vào máy khách hàng như thế nào. Cách này sẽ khá vất vả cho bạn, bù lại chương trình chỉ tải về các file cần thiết (các file đã có thay đổi) vì thế tiến trình cập nhật sẽ nhanh hơn, đỡ tiêu tốn tài nguyên, thời gian, và không cần khách hàng phải chạy lại chương trình Setup.
Kỳ I: Update tự động
Trong bài viết hôm nay, tôi sẽ hướng dẫn các bạn tạo chương trình cập nhật tự động bằng ClickOne. ClickOne cho phép bạn tạo cả bộ cài đặt lẫn tính năng Update tự động rất nhanh và hiệu quả.
A. Chuẩn bị
+ Project: Tôi đã chuẩn bị sẵn 1 Project như sau: tên project là AutoUpdateTut1 Vâng, 1 Project rất đơn giản, chỉ có 1 Form trắng, không thêm control nào khác, không code xử lý. Tôi sẽ đóng gói Project này và thêm tính năng tự động cập nhật. Ở lần chạy cập nhật tiếp theo, tôi sẽ bổ sung 1 Button vào trên Form để các bạn thấy các thay đổi đã diễn ra như thế nào.
+ Website để đưa chương trình lên: giả sử tôi có 1 Website ở địa chỉ http://your-website.com. Khách hàng khi muốn tải phần mềm của tôi về sử dụng sẽ được cấp đường link tải phần mềm về tại địa chỉ: http://your-website.com/software/AutoUpdateTut1
+ Tài khoản FTP để truyền file lên WebServer: có nhiều cách để đưa các file phần mềm của bạn lên Web nhưng tôi thấy cách thông dụng nhất là sử dụng FTP. ClickOne cũng hỗ trợ rất tốt FTP (nó dịch file và truyền thẳng lên máy chủ thông qua FTP). Nếu sử dụng cách này, bạn chỉ cần khai báo địa chỉ FTP 1 lần là chạy xả láng luôn. Vì vậy bạn hãy chuẩn bị 1 tài khoản FTP có quyền đoc/ghi file lên máy chủ web. Ở đây tôi chuẩn bị 1 tài khoản ví dụ là ftpuser1, có quyền đọc/ghi file từ thư mục gốc của website.
B. Thực hiện
+ Từ Visual Studio, Click chuột phải vào Project chính của bạn và chọn mục Publish + Trên cửa sổ Publish Wizard mới hiện ra, nhập địa chỉ FTP đến vị trị đặt phần mềm trên máy chủ Web, sau đó nhấn Next + Bước tiếp theo, bạn nhập vào địa chỉ web mà bạn dự định cấp cho khách hàng để tải phần mềm về (đây cũng chính là địa chỉ mà phần mềm của bạn sẽ kiểm tra phiên bản mới) + Bước tiếp theo, bạn chọn chế độ làm việc cho chương trình của bạn là Online hay Offline. Ở chế độ Online only (chế độ thứ 2 trong hình dưới đây), mỗi lần bạn chạy chương trình thì các tệp tin cần thiết để chạy sẽ được tải về máy. Chế độ này cần phải có kết nối mạng internet thì mới khởi động được chương trình. Ở chế độ Online or Offline (chế độ thứ nhất trong hình dưới), ứng dụng của bạn sẽ được tải về máy 1 lần. Ở các lần sau, nếu không có mạng internet thì nó cứ chạy với phiên bản đã tải về. Nếu có mạng Internet, chương trình sẽ tự động kiểm tra xem trên website có bản nào mới hơn không. Nếu có bản mới hơn, nó sẽ tải bản mới về và chạy với bản mới. Như vậy, dù bạn chọn chế độ Online hay Offline thì chương trình của bạn cũng sẽ được cập nhật phiên bản mới nhất + Cuối cùng, bạn nhấn vào nút Finish, Visual Studio sẽ hỏi bạn tên đăng nhập và mật khẩu để truyền file qua FTP. Bạn nhập vào tên đăng nhập và mật khẩu đã chuẩn bị ở bước A, sau đó nhấn OK + Bạn cần đợi 1 khoảng thời gian nhất định (tùy thuộc vào dung lượng các file bạn cần đưa lên lớn hay nhỏ và đường truyền từ máy bạn lên website) để Visual Studio đưa các file lên máy chủ Web. Sau khi việc tải file lên hoàn tất, trang web chứa liên kết để cài đặt ứng dụng của bạn sẽ được tự động mở ra + Bạn Click vào nút Install để tải file setup.exe về, chạy file này để tiến hành cài đặt + Quá trình cài đặt kết thúc, ứng dụng của bạn sẽ tự động chạy lên.
Rất đơn giản phải không các bạn? Nhìn qua quy trình thì có vẻ dài dòng, nhiều bước nhưng thực ra nếu bạn đã làm quen rồi thì chỉ cần vài cái click chuột là đã hoàn thành. Không cần thêm bất cứ 1 dòng Code nào. 1 mũi tên lại trúng tới 2 cái đích (vừa đóng gói được ứng dụng, vừa có tính năng tự động cập nhật).
Chương trình của bạn bây giờ sẽ nằm ở trong 1 thư mục đại khái là như thế này: C:\Users\<tên user>\AppData\Local\Apps\2.0\GEC6951W.K73\VGQ082ZX.OK1\auto..tion_faacdffd77271a05_0001.0000_e4a74cb751ea8fbe, trong đó <tên user> là tên tài khoản Windows của bạn. Còn các thư mục có ký hiệu loằng ngoằng kia thì trên mỗi máy sẽ khác nhau, nhưng điều đó không thực sự quá quan trọng. Chỉ cần trong chương trình của bạn xử lý tốt thì file chạy nằm ở đâu cũng không phải là vấn đề quá lớn.
C. Một số lưu ý:
+ Ở bước cài đặt ứng dụng, khi bạn Click vào nút Install trên website, có thể bạn sẽ nhận được 1 cái thông báo lỗi 404 (không tìm thấy file). Điều này thỉnh thoảng hay xảy ra nếu website của bạn host trên IIS6. Nguyên nhân của nó là do IIS6 mặc định không cho tải tệp tin EXE về. Để khắc phục, bạn có thể làm như sau:
- - Mở IIS Manager (trên máy chủ web ra) - nếu bạn không có quyền truy cập vào máy chủ web thì phải yêu cầu admin làm giúp bạn thôi
- - Right Click vào website của bạn và chọn Properties
- - Chuyển sang Tab "Home Directory"
- - Trong mục Execute Permission, chọn Script only
- - Nhấn OK để lưu lại và bạn có thể tải file cài đặt bình thường
+ Trên máy tính cài Win7 hoặc Win8, bạn có thể sẽ gặp 1 số thông báo về quyền cài đặt phần mềm lên máy tính. Đây là cảnh báo hết sức bình thường khi bạn cài phần mềm lên máy tính.
D. Tùy chọn nâng cao
Có 1 số tùy chọn khi sử dụng ClickOne, bạn có thể tham khảo thêm để cho ứng dụng của bạn linh hoạt hơn. Để vào mục tùy chọn, Trong Visual Studio bạn Right Click vào Project chính của mình, chọn Properties. Ở Tab Publish, bạn có thể có 1 số tùy chọn như sau:
- + Automatic increment revision with each publish: Tự động tăng số hiệu phiên bản của bạn lên mỗi lần Publish. Số hiệu phiên bản chỉ tự động tăng ở phần Revision. Nếu số hiệu phiên bản có thay đổi thì chương trình phía client mới nhận ra đã có phiên bản mới để Update. Bạn có thể để tự động tăng hoặc bỏ dấu tích đi và điền vào số phiên bản mà bạn muốn
- + Application Files: sẽ mở ra hộp thoại cho phép bạn chọn các file đi kèm ứng dụng của mình
- + Prerequisites: sẽ mở ra hộp thoại cho phép bạn chọn các phần mềm cần có để chạy ứng dụng. Chương trình này làm trên .NET nên mặc định nó đã chọn .NET cho bạn rồi. Nếu cần thêm chương trình gì phụ trợ nữa thì bạn có thể chọn thêm
- Updates: Chọn chế độ tự động Update cho chương trình. Có 2 chế độ là kiểm tra Update trước khi chạy chương trình và kiểm tra update khi thoát chương trình
- Options: thêm 1 số tùy chọn khác cho bạn như: có đặt Shortcut cho chương trình của bạn ra Desktop không, có đăng ký file extension với máy khách không.... cái này các bạn tự tìm hiểu thêm nhé
+ Bây giờ tôi sẽ tạo ra 1 thay đổi trên chương trình AutoUpdateTut1 bằng cách thêm 1 Button trên Form chính. + Đóng gói lại chương trình bằng cách Right Click vào project AutoUpdateTut1 và chọn Publish
+ Cửa sổ Publish hiện ra, bây giờ chỉ cần nhấn Finish (vì các thông số đã khai báo cả rồi)
+ Nhập Username và Password FTP khi được hỏi, vậy là hoàn tất bước cập nhật
+ Chạy lại chương trình lúc trước và bạn sẽ thấy các thay đổi đã được cập nhật