• Thứ Sáu, 25/02/2005 08:26 (GMT+7)

    ClickOnce - Công nghệ phân phối của tương lai

    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ài đặt tập chia sẻ     Không      
        Cài đặt driver     Không      
        Cài vào GAC (Global Assembly Cache)     Không      
        Đưa ứng dụng vào mục Startup     Không      
        Đưa ứng dụng vào danh sách Favorites     Không      
      Đăng kí kiểu tập tin     Không      
      Truy cập registry     Không (3)      
      Vá nhị phân các tập tin         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
     

     

    ID: A0502_101