• Thứ Sáu, 05/02/2010 09:18 (GMT+7)

    Lỗi tương thích ứng dụng với Windows 7 (Phần 2)

    Tiếp sau bài viết “Kiểm tra tính tương thích ứng dụng với Windows 7”, ID:A0912_132, chúng ta sẽ tìm hiểu thêm về những lỗi tương thích.

    Trước Windows Vista, rất nhiều ứng dụng thường được thực thi với quyền Administrator (quản trị, có toàn quyền trên hệ thống) và có thể tự do đọc/ghi các file hệ thống và registry. Nếu dùng tài khoản Standard User (người dùng thông thường), những ứng dụng đó sẽ không thể truy cập các file hệ thống, registry và thất bại trong việc thực thi.

    Window Vista và Windows 7 đã cải thiện khả năng tương thích của ứng dụng cho Standard User bằng cách chuyển hướng ghi (file và registry) tới các khu vực dành riêng cho từng người dùng.

    Ví dụ: nếu ứng dụng cố gắng ghi vào file C:\Program Files\Contoso\Settings.ini, và người sử dụng không có quyền ghi vào thư mục này, việc ghi sẽ được chuyển hướng sang C:\Users\\AppData\Local\VirtualStore\Program Files\contoso\settings.ini. Đối với Registry, nếu ứng dụng cố gắng ghi vào HKEY_LOCAL_MACHINE\Software\Contoso\, nó sẽ được tự động chuyển hướng sang HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\Software\Contoso hay HKEY_USERS\_Classes\VirtualStore\Machine\Software\Contoso.

    Hình sau mô tả chi tiết tiến trình ảo hóa trong Windows 7 phục vụ cho việc chuyển hướng trên.

    Việc ảo hóa bao gồm 2 thành phần:

    • Ảo hoá file

    • Ảo hóa registry

    Ảo hóa file

    Trong khu vực hệ thống, thông thường chỉ Administrator có quyền ghi file, ứng dụng chạy với quyền của Standard User trong tình huống này có thể không đủ quyền truy cập. Khi ứng dụng muốn ghi file trong khu vực hệ thống, nơi mà chỉ Administrator có quyền ghi, Windows khi đó sẽ chuyển hướng ghi file ở khu vực riêng của người dùng nằm trong thư mục ảo (Virtual Store), tại %LOCALAPPDATA%\VirtualStore. Sau đó khi ứng dụng muốn lấy lại nội dung của file này thì hệ thống sẽ cung cấp file nằm trong Virtual Store. Vì các thành phần bảo mật của Windows xử lý việc ảo hóa mà không cần sự giúp đỡ của ứng dụng, ứng dụng vẫn tin rằng nó có thể đọc và ghi file bình thường.

    Ảo hóa Registry

    Việc ảo hóa registry tương tự như ảo hóa file, chỉ khác ở chỗ được áp dụng cho những khóa con của khóa HKEY_LOCAL_MACHINE\SOFTWARE. Tính năng này cho phép ứng dụng cần lưu giữ các thông tin cấu hình trong HKEY_LOCAL_MACHINE\SOFTWARE có thể hoạt động bình thường khi chạy với quyền Standard User. Khóa và dữ liệu đươc chuyển hướng đến HKEY_CLASSES_ROOT\VirtualStore\SOFTWARE. Cũng như trong trường hợp ảo hóa File, mỗi user đều có một bản sao ảo bất kỳ giá trị nào mà ứng dụng lưu trữ trong HKLM.

    Các biểu hiện lỗi

    1. Không thể tìm thấy file hoặc folder đã tạo

    Khi sử dụng ứng dụng trong chế độ ảo hóa sẵn sàng, bạn tạo file dữ liệu trong khu vực ảo của hệ thống. Khi sử dụng một ứng dụng khác hoặc Windows Explorer để truy cập những file mới vừa tạo, bạn không thể tìm thấy chúng. Ví dụ: Nếu bạn lưu file trong ứng dụng chỉnh sửa ảnh vào thư mục %program files%, %systemroot%, hoặc %program data%, bạn không thể tìm thấy file vừa lưu.

    2. Sau khi nâng cấp ứng dụng hoạt động bất thường

    Sau khi bạn nâng cấp một ứng dụng và nhận được thông báo lỗi như sau “Error. Please upgrade your application”. Thêm vào đó, ứng dụng hoạt động không như mong muốn. Ứng dụng dường như sử dụng dữ liệu sai hoặc dữ liệu chưa nâng cấp. Do bị ảo hóa nên các file cập nhập bị chuyển hướng ghi đến khu vực khác do đó các file trong thư mục cài đặt không được cập nhập phiên bản mới.

    3. Sau khi gỡ bỏ ứng dụng, các file của ứng dụng vẫn tồn tại trong máy

    •Trong một ứng dụng khác, bạn chú ý rằng thông tin file và folder cho ứng dụng đã bị gỡ bỏ vẫn còn tồn tại trong thư mục %program files%, %program data%, hoặc %systemroot%.

    • Thư mục %userprofile%\AppData\Local\VirtualStore có kích thước lớn hơn so vơi ước lượng của bạn. Khi bạn gỡ bỏ ứng dụng, những file ảo được tạo ra trong quá trình làm việc của ứng dụng đã không được gỡ đi.

    Giải pháp

    Ảo hóa file và registry chỉ nhằm hỗ trợ cho việc tương thích ứng dụng đối với những chương trình đã tồn tại. Việc ảo hóa này sẽ bị loại bỏ trong các phiên bản Windows tương lai, ví dụ chế độ này không tồn tại trong phiên bản 64 bit. Vì vậy lập trình viên cần chú ý thiết kế lại ứng dụng sao cho có thể hoạt động tốt trong Windows 7 mà không cần chế độ ảo hóa trên. Ứng dụng được thiết kế cho Windows 7 không nên thực hiện hành động ghi dữ liệu lên các khu vực nhạy cảm của hệ thống cũng như không nên trông mong vào việc ảo hóa để sửa chữa những hành vi không tương thích của ứng dụng. Khi cập nhập lại mã nguồn để hoạt động trên Windows 7, Lập trình viên cần chắc chắn rằng trong suốt quá trình chạy ứng dụng chỉ ghi dữ liệu vào khu vực riêng của từng người dùng hoặc trong khu vực %alluserprofile% (CSIDL_COMMON_APPDATA) được thiết lập ALC (access control list).

    Lập trình viên khi phát triển ứng dụng cần chú ý các điểm sau:

    • Tạo và nhúng file manifest vào ứng dụng với mức requestedExecutionLevel phù hợp cho việc tương tác trong ứng dụng. Chế độ ảo hóa sẽ bị tắt đối với ứng dụng nhúng manifest.

    • Không sử dụng registry làm phương tiện giao tiếp trao đổi thông tin giữa các tiến trình.

    • Kiểm thử ứng dụng trong Windows 7 đảm bảo tiến trình thực thi ứng dụng với Standard User không ghi dữ liệu vào không gian tên toàn cục như %systemroot%.

    Đỗ Hoàng An
    Email: andh2007@hotmail.com
    -----------------------------------------------
    Tài liệu tham khảo:
    Common file and registry virtualization issues in Windows Vista or in Windows 7, http://support.microsoft.com/kb/-927387 (http://tiny.cc/zb9yY)

    ID: A1001_95