• Thứ Ba, 08/06/2004 10:41 (GMT+7)

    Tạo shortcut trên desktop với Package & Deployment Wizard

    Package & Deployment Wizard (PDW) là một công cụ rất quen thuộc và tiện lợi cho những người lập trình VB6. Mặc dù không có nhiều tính năng như những công cụ tạo bộ cài đặt ứng dụng độc lập nhưng PDW lại có ưu điểm là sẵn có, không tốn tiền và thời gian tìm hiểu, được tích hợp với Visual Studio và nhất là dễ dàng tuỳ chỉnh bằng chính ngôn ngữ quen thuộc (với các lập trình viên VB). Một trong những nhược điểm mà các lập trình viên thường 'kêu ca' về PDW là nó không tạo được shortcut trên desktop (màn hình) của Windows - điều người dùng cuối luôn đòi hỏi. Trong bài viết này, tôi trình bày cách khắc phục thiếu sót đó của PDW.

    Như đã nói ở trên, PDW có thể tuỳ chỉnh bằng chính VB. Để kiểm chứng, các bạn có thể tìm tới thư mục Microsoft Visual Studio\VB98\WIZARDS\PDWIZARD\SETUP1. Tại đó, các bạn sẽ thấy toàn bộ chương trình nguồn để tạo ra tệp SETUP1.EXE - phần chính yếu của bộ cài đặt do PDW tạo ra. Chỉ cần thêm một vài dòng lệnh vào chương trình đó, các bạn đã sẵn sàng 'cho ra lò' những bộ cài đặt mới theo ý mình, ví dụ như tạo shortcut trên desktop. Mặc dù có thể tạo shortcut trên desktop bằng một số cách 'vòng vo' khác nhưng việc sửa Setup1.exe sẽ có lợi hơn về nhiều mặt như tận dụng thủ tục phục hồi khi có lỗi trong bản thân chương trình cài đặt, ghi nhật ký về việc tạo shortcut trong tệp St6Unst.log để quá trình gỡ bỏ (uninstall) có thể tự động xoá shortcut.

    Trước khi bắt tay vào việc, các bạn cần lưu ý rằng cách làm dưới đây chỉ áp dụng cho bản VB6 đã cập nhật Service Pack 5. Trong các phiên bản cũ, chương trình Setup1 hơi khác một chút (ví dụ như dùng cấu trúc If Then Ese thay vì Select Case). Tất nhiên, các bạn có thể tự chỉnh sửa phiên bản cũ theo cách khác đi một chút so với những gì trình bày dưới đây nhưng việc cập nhật Service Pack 5 đơn giản hơn và sẽ có lợi hơn xét về lâu dài (vì không phải tự nhiên Microsoft bỏ công tạo ra SP5!). Các bước chỉnh sửa cụ thể như sau:

    1. Trong thủ tục form load của FRMSetup1, tìm đoạn mã

    Case UCase$(gsSTARTMENUKEY), UCase$(gsPROGMENUKEY)

    và sửa thành

    Case UCase$(gsSTARTMENUKEY), UCase$(gsPROGMENUKEY), 'DESKTOP'

    Tác dụng của đoạn mã này là bỏ qua không tạo các nhóm 'Start Menu' và 'Programs' trong Start Menu Group (vì chúng đã có sẵn trong mọi máy tính cài Windows từ 9x trở về sau). Chúng ta cho thêm chuỗi 'DESKTOP' để báo cho chương trình biết không tạo nhóm Desktop trong Start Menu. Điều chúng ta cần là tạo shortcut ngay trên desktop.

    2. Trong thủ tục CreateIcons của mođun Bassetup1, tìm đoạn mã

    Loop

    CreateShellLink strProgramPath, strGroup, strProgramArgs, strProgramIconTitle, fPrivate, sParent

    và chèn vào giữa 3 dòng lệnh sau

    Loop

    If UCase(strGroup) = 'DESKTOP' Then

    strGroup = '..\..\Desktop'

    End If

    CreateShellLink strProgramPath, strGroup, strProgramArgs, strProgramIconTitle, fPrivate, sParent

    (đoạn in nghiêng là 3 dòng lệnh chèn thêm)

    Bằng cách này, chúng ta buộc Setup1 coi 'Desktop' như một từ đặc biệt và luôn tạo shortcut trên desktop nếu tìm thấy nó trong Setup.lst (các bạn sẽ hiểu cụ thể hơn trong bước 3 dưới đây).

    3. Sau khi hoàn thành các bước trên, hãy dịch lại Setup1.VBP. Bạn sẽ tìm thấy tệp Setup1.exe mới trong thư mục PDWizard. Khi bạn sử dụng PDW, nó sẽ đóng gói tệp Setup1.exe mới vào bộ cài đặt của bạn. Sau đó, bạn phải hoàn tất công việc cuối cùng là sửa tệp Setup.lst.

    Nếu bạn đã yêu cầu PDW tạo shortcut trong Start Menu, bạn sẽ tìm thấy mục [IconGroups] dạng như sau:

    [IconGroups]

    Group0=Your Application

    PrivateGroup0=-1

    Parent0=$(Programs)

    Hãy thêm vào cuối mục này một IconGroup mới như sau:

    Group1=DeskTop

    PrivateGroup1=-1

    Parent1=$(Programs)

    Chỉ số (trong ví dụ trên là 1) đi với mỗi từ khoá Group tăng lên 1 với mỗi IconGroup bạn có. Vì vậy, nếu trong tệp Setup.lst đã có tới Group1 thì bạn phải thêm Group2, ... Ngược lại, nếu không tìm thấy mục IconGroups thì bạn hãy thêm nó vào và tạo Group0. Lưu ý rằng các thuộc tính PrivateGroup có thể nhận giá trị -1 hoặc True đều được.

    Sau đó, hãy thêm vào sau mục IconGroups một mục [Desktop] như sau:

    [DeskTop]

    Icon1='Your Application.exe'

    Title1=Your Application

    StartIn1=$(AppPath)

    Ở đây, tôi giả thiết rằng bạn chạy ứng dụng từ thư mục $(AppPath). $(AppPath) là một macro trỏ tới thư mục chương trình chính. Nếu bạn muốn sử dụng các macro khác, hãy tham khảo MSDN và Knowledge base. Nếu muốn tạo nhiều shortcut trên desktop, bạn chỉ cần tạo thêm các dòng Icon2, Title2, StartIn2,...

    Các bạn có thể tìm hiểu thêm các thông tin liên quan tại web site của Microsoft:

    - Description of Setup.lst Sections (Q189743)

    - Run Setup1.vbp in the Design Environment (Q189738)

    - Package and Deployment Wizard Installation Macros (Q189739)

    và trang web AllAPI.net:

    - www.mentalis.org/apilist/fCreateShellLink.shtml.ÿ

    Đỗ Thanh Xuân
    xuandt@hotmail.com
    TT CNTT, Ngân hàng Công Thương Việt Nam

    ID: A0405_114