Ngay sau khi phát hành Visual Studio .Net 2003, các nhà phát triển của Microsoft đã bắt tay vào nghiên cứu một giải pháp công nghệ mới mang tên ClickOnce, một công nghệ cài đặt mạnh hơn, mềm dẻo hơn, hiệu quả hơn công nghệ Windows Installer (MSI) và web.
Ngay sau khi phát hành Visual Studio .Net 2003, các nhà phát triển của Microsoft đã bắt tay vào nghiên cứu một giải pháp công nghệ mới mang tên ClickOnce, một công nghệ cài đặt mạnh hơn, mềm dẻo hơn, hiệu quả hơn công nghệ Windows Installer (MSI) và web.
Công nghệ phân phối mang tên ClickOnce đã được Microsoft dồn rất nhiều tâm huyết và nó sẽ được đưa vào bộ công cụ lập trình nổi tiếng Visual Studio .Net phiên bản 2005. ClickOnce có khả năng giải quyết những khó khăn, vất vả của lập trình viên khi phân phối ứng dụng.
Việc phân phối ứng dụng luôn phải đảm bảo 3 yếu tố cơ bản:
• Ứng dụng phải chạy tốt trên mọi máy tính khách.
• Việc cài đặt không gây tranh chấp với những ứng dụng sẵn có trong máy khách.
• Không bị bất kì một ứng dụng nào khác được cài vào máy khách trong tương lai tranh chấp.
Thực sự vấn đề này cũng không khó nếu như ứng dụng chỉ được phân phối cho một vài người, nhưng thực tế các ứng dụng luôn có rất nhiều người dùng. Có nghĩa là ứng dụng của bạn được phổ biến rộng rãi nhưng cũng đồng nghĩa với rất nhiều vấn đề có thể xảy ra, nào là việc tranh chấp thư viện, tài nguyên giữa các ứng dụng trên máy khách, nào là việc phân phối các bản cập nhật cho ứng dụng trong tương lai... tất cả đều là những thử thách khó khăn.
Các phương án cũ
|
|
Bảng 1: So sánh các công nghệ phân phối |
|
|
|
Tính năng |
|
|
Web |
|
|
ClickOnce |
|
|
MSI |
|
|
|
Tính phổ biến |
|
|
• |
|
|
|
|
|
|
|
|
|
Tự động phân phối bản cập nhật |
|
|
|
|
|
• |
|
|
|
|
|
|
Khả năng tự phân phối |
|
|
• |
|
|
• |
|
|
|
|
|
|
Cài đặt hoặc chạy tuỳ ý người dùng |
|
|
• |
|
|
• |
|
|
|
|
|
|
Giao diện phong phú |
|
|
|
|
|
• |
|
|
• |
|
|
|
Hoạt động ngoại tuyến (Offline) |
|
|
|
|
|
• |
|
|
• |
|
|
|
Hỗ trợ giao diện nền Windows |
|
|
|
|
|
• |
|
|
• |
|
|
|
Tranh chấp thư viện |
|
|
|
|
|
|
|
|
• |
|
Có nhiều cách đối phó với các vấn đề trên, ví dụ để tránh gây tranh chấp giữa các ứng dụng, bạn có thể yêu cầu người dùng tạo các bản lưu dự phòng hệ thống trước khi cài đặt ứng dụng và phục hồi lại nếu cần, nhưng nếu máy họ xảy ra tranh chấp mà vẫn muốn dùng ứng dụng của bạn thì sao? Đó là một câu hỏi lớn! Thứ hai, để xử lý vấn đề cập nhật ứng dụng, bạn có thể đưa bộ cài đặt lên máy chủ web và cập nhật nếu cần thiết để khi người dùng tải xuống họ luôn có được phiên bản mới nhất, nhưng... nếu cùng lúc có tới hàng trăm người truy cập vào máy chủ của bạn để tải xuống và dung lượng của bộ cài lại lớn thì điều không thể tránh khỏi là tắc nghẽn băng thông, gây thiệt hại lớn cho website của bạn.
Phương án ClickOnce
ClickOnce cung cấp giải pháp 'vẹn cả đôi đường', khi phân phối ứng dụng theo công nghệ web bạn sẽ có được khả năng vươn rộng của web, nhưng lại bị băng thông kết nối và trình duyệt cản trở, đâu phải ai cũng dùng chung một trình duyệt như nhau và có kết nối tốc độ cao.
Còn phân phối dùng công nghệ MSI giải quyết được vấn đề băng thông nhưng các bản cập nhật lại phải tải xuống một cách thủ công. Và hơn thế nữa, cả hai phương án này đều không giải quyết được ổn thoả vấn đề tranh chấp.
ClickOnce ra đời kết hợp được những ưu điểm của cả hai công nghệ trên (xem bảng 1) và kèm theo rất nhiều tính năng mới khác.
Cái mới của ClickOnce
Không chỉ giải quyết được những vấn đề cũ một cách tối ưu mà ClickOnce còn đem đến nhiều tính năng vượt trội chưa từng thấy ở một công nghệ phân phối nào khác. Chẳng hạn ClickOnce được tích hợp một cách chặt chẽ và có thể tùy biến dễ dàng thông qua Publish Wizard của Visual Studio .Net. Không chỉ vậy, ClickOnce cho phép tập tin manifest phân phối và các tập tin cài đặt có thể được lưu trữ cùng hoặc khác chỗ chỉ cần đường dẫn phải được liệt kê trong tập tin manifest phân phối (xem đoạn mã 1). Ngoài ra, ClickOnce cho phép việc giao tiếp giữa lập trình viên và ClickOnce hết sức đơn giản, chỉ cần vài dòng mã đơn giản là có thể tải xuống các bản cập nhật (xem đoạn mã 2). Hay việc kết hợp một cách chặt chẽ với BITS (Background Intelligent Transfer Service - dịch vụ chạy nền truyền tải thông minh) khiến cho việc kết nối để tìm kiếm thông tin cập nhật và tải xuống rất dễ dàng và nhanh chóng.
Hạn chế và những đột phá
|
|
Bảng 2: So sánh giữa 2 công nghệ ClickOnce và MSI |
|
|
|
Mục so sánh |
|
|
ClickOnce |
|
|
MSI |
|
|
|
Vị trí cài đặt |
|
|
Bộ đệm (1) |
|
|
Thư mục (2) |
|
|
|
Cài đặt đa người dùng |
|
|
Không |
|
|
Có |
|
|
|
Cài đặt tập chia sẻ |
|
|
Không |
|
|
Có |
|
|
|
Cài đặt driver |
|
|
Không |
|
|
Có |
|
|
|
Cài vào GAC (Global Assembly Cache) |
|
|
Không |
|
|
Có |
|
|
|
Đưa ứng dụng vào mục Startup |
|
|
Không |
|
|
Có |
|
|
|
Đưa ứng dụng vào danh sách Favorites |
|
|
Không |
|
|
Có |
|
|
|
Đăng kí kiểu tập tin |
|
|
Không |
|
|
Có |
|
|
|
Truy cập registry |
|
|
Không (3) |
|
|
Có |
|
|
|
Vá nhị phân các tập tin |
|
|
Có |
|
|
Không |
|
|
|
Chú thích: (1) : Bộ đệm cài đặt của ClickOnce (2) : Thư mục cài đặt mà bạn chỉ định (3) : Vẫn có thể truy cập vào khoá HKEY_LOCAL_MACHINE nếu có đủ quyền |
|
Không có gì là hoàn hảo, ClickOnce có ưu điểm nhưng cũng có nhược điểm (xem bảng 2). Trước hết là vị trí cài đặt của ứng dụng, với ClickOnce mọi ứng dụng cài vào đều được đưa vào bộ đệm ứng dụng của ClickOnce, ngoài ra, hiện tại việc cài đặt đa người dùng (multiple-users), cài đặt tập chia sẻ cũng như cài đặt các driver đều không thể thực hiện. Việc truy cập registry cũng không thể thực hiện nên đăng kí tập tin cũng không thể. Có thể nói hầu hết các mục so sánh ở bảng 2 đều cho thấy ClickOnce 'thua' MSI. Nhưng có một điều mà MSI không bao giờ có thể làm được đó là vá nhị phân các tập tin, chính tính năng tuyệt vời này của công nghệ ClickOnce có thể tạo ra các tập tin cập nhật có kích thước rất nhỏ vì chỉ cần chứa thông tin của các byte cần thay đổi trong phần mềm chứ không cần kèm theo cả tập tin đã sửa lỗi như công nghệ MSI. Đặc biệt, ClickOnce là công nghệ 'thông minh' bởi nó cho phép ứng dụng trên máy khách có thể gửi đến các truy xuất đã xác định rõ mục tiêu rồi máy chủ sẽ xử lý và chuyển hướng máy khách đến địa chỉ cần thiết (xem 'Mô hình hoạt động của công nghệ phân phối ClickOnce').
Lời kết
Hy vọng cùng với Visual Studio .Net 2005 và phiên bản Windows kế tiếp (Longhorn), ClickOnce sẽ có một tương lai tốt đẹp, xứng đáng làm người kế vị MSI.
|
Đoạn mã 1: Ví dụ về tập tin manifest phân phối (XML) <?xml version='1.0' encoding='utf-8'?> <assembly xsi:schemaLocation='urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd' manifestVersion='1.0' xmlns='urn:schemas-microsoft-com:asm.v1' xmlns:asmv2='urn:schemas-microsoft-com:asm.v2' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> <assemblyIdentity name='http://localhost/appdeploy/XyzClickOnceTest/ xyzClickOnceTest.deploy' version='2.0.0.0' publicKeyToken='ef176fbfd3ea4d64' processorArchitecture='x86' asmv2:culture='en-US' /> <description asmv2:publisher='BubSoft' asmv2:product='XyzClickOnceTest'> </description> <deployment isRequiredUpdate='false' xmlns='urn:schemas-microsoft-com:asm.v2'> <install shellVisible='true' /> <subscription> <update> <beforeApplicationStartup /> <periodic> <minElapsedTimeAllowed time='0' unit='hours' /> </periodic> </update> </subscription> <deploymentProvider codebase='XyzClickOnceTest.deploy' /></deployment> <dependency><dependentAssembly> <assemblyIdentity name=' |
|
http://localhost/appdeploy/ XyzClickOnceTest/XyzClickOnceTest.manifest' version='2.0.0.0' publicKeyToken=' ef176fbfd3ea4d64' processorArchitecture='x86' asmv2:culture='en-US' /> </dependentAssembly> <asmv2:installFrom codebase='XyzClickOnceTest_2.0.0.0/Xyz ClickOnceTest.manifest' /> </dependency> </assembly> Đoạn mã 2: Ví dụ về sử dụng ClickOnce để tải cập nhật (C#) private void checkForUpdatesMenuItem_Click(object sender, System.EventArgs e) { ApplicationDeployment updater = ApplicationDeployment.CurrentDeployment; Version verDepServer = updater.CheckForUpdate(); if (verDepServer != null) // Có bản cập nhật mới { DialogResult res = MessageBox.Show('Tồn tại phiên bản mới của XyzClickOnceTest. Bạn có muốn cập nhật ứng dụng không?', 'XyzClickOnceTest Updater', MessageBoxButtons.YesNo); if (res == DialogResult.Yes) { updater.Update(); MessageBox.Show('Hãy đóng và khởi động lại ứng dụng để có thể sử dụng phiên bản mới.'); } }} |
|
Nguyễn Trí Trung
nguyentritrung@fpt.vn
|
Nguồn tham khảo |
|
|
• InstallSite Microsoft ClickOnce Technology: http://www.installsite.org/pages/en/clickonce.htm • Longhorn Developer Center Home: Fundamentals: Introducing Client Application Deployment with ClickOnce: http://msdn.microsoft.com/Longhorn/understanding /pillars/fundamentals/default.aspx?pull=/library/en-us/dnwinforms/html/clickonce.asp • ClickOnce: Deploy and Update Your Smart Client Projects Using a Central Server -- MSDN Magazine, May 2004: http://msdn.microsoft.com/msdnmag/issues/04/05 /ClickOnce/default.aspx |
|