59
Chuyển đổi ứng dụng lên Windows 7. Những vấn đề có thể gặp phải. Cách xử lý. Presenter: Trịnh Minh Cường [email protected]

Fix incompatible issues of old applictions on Windows 7

Embed Size (px)

DESCRIPTION

Xử lý lỗi không tương thích của ứng dụng cũ trên Windows 7

Citation preview

Page 1: Fix incompatible issues of old applictions on Windows 7

Chuyển đổi ứng dụng lên Windows 7. Những vấn đề có thể gặp phải.Cách xử lý.

Presenter: Trịnh Minh Cườ[email protected]

Page 2: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Nội dung trình bày

• Các lỗi gây không tương thích trên Windows 7

• Kiểm tra tính tương thích của phần mềm

• Sử dụng bộ công cụ Application Compatibility Toolkit để sửa lỗi không tương thích

Page 3: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Câu chuyện tương thích• Ở trường học, học sinh Việt nam được dạy

dấu thập phân là dấu phẩy. Ví dụ: Pi = 3,14159

• Ở công ty, chúng ta lại quen dùng dấu thập phân là dấu chấm. Pi = 3.14159

• Chuẩn ổ cắm điện Việt nam là 2 lỗ. Thiết bị điện tử ở VN có nhiều loại phích cắm như hai chân tròn, hai chân dẹt, ba chân, ba chân vuông, 2 dẹt một tròn….

• Ô tô tay lái thuận <> nghịch

• Bước răng hệ mét <> hệ Anh

Page 4: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Tại sao cần chuyển đổi lên Windows 7?• Windows XP đủ tốt những đã quá cũ.

• Windows Vista không còn được bán.

• Windows 7 nhanh, ổn định, thân thiện và yêu cầu phần cứng như Windows Vista.

• Phần mềm không chạy được trên Windows 7 ► mất đi cơ hội bán phần mềm trên HĐH thịnh hành trong vòng 5 năm nữa.

Page 5: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Một số hình ảnh Windows 7 tại Nhật Bản

Page 6: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Một số hình ảnh Windows 7 tại Nhật Bản

Page 7: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Một số hình ảnh Windows 7 tại Nhật Bản

Page 8: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

6 lỗi cơ bản gây không tương thích trên Windows 7

• Data Redirection – đổi hướng ghi vào tài nguyên hệ thống

• High DPI – giao diện xô lệch ở chế độ phân giải cao

• Installer Detection – nhận diện sai trình cài đặt

• Session 0 Isolation – rào cản giữa các session

• User Interface Privilege Isolation - vênh quyền giữa 2 tiến trình

• Version Checking – đọc sai phiên bản HĐH

Page 9: Fix incompatible issues of old applictions on Windows 7

User Account Control - UAC

Microsoft Confidential

Page 10: Fix incompatible issues of old applictions on Windows 7

User Account Control : Over View

• Mặc định logon với quyền standard user• Tự động nâng quyền khi cần thiết• Ngăn cản mọi sự truy cập tài nguyên “nhạy

cảm” khi chưa được phép• Standard user không thể

• Cài đặt 1 số ứng dụng• Thay đổi thành phần hệ thống• Thay đổi các thông tin thiết lập máy• Quản trị quyền

Page 11: Fix incompatible issues of old applictions on Windows 7

Window 7 UAC có 4 mức bảo vệ

Mặc định

Page 12: Fix incompatible issues of old applictions on Windows 7

Giải thích mức độ cảnh báo trong UAC• High:

– Cảnh báo khi có ứng dụng muốn cài đặt hoặc thay đổi thông tin hệ thống

– Cảnh báo khi người sử dụng thay đổi thiết lập cho máy

• Medium: Mức mặc định– Chỉ cảnh báo khi có ứng dụng muốn cài đặt hoặc

thay đổi thông tin hệ thống– Không cảnh báo khi người sử dụng thay đổi thiết lập

cho máy• Low:

– Chỉ cảnh báo khi có ứng dụng muốn cài đặt hoặc thay đổi thông tin hệ thống nhưng không làm mờ màn hình

• Off: UAC off– Không cảnh báo gì cả

Page 13: Fix incompatible issues of old applictions on Windows 7

User Account Control Levels

• Chạy notepad và save file vào thư mục C:– Với Normal user thì báo không có quyền và không

cho ghi file.

– Với Administrator thì ghi file thành công.

Page 14: Fix incompatible issues of old applictions on Windows 7

Hiêu ứng UAC với ứng dụng cũ cho XP.

• Không cài đặt được ứng dụng hoặc cài đặt sai• Ứng dụng báo lỗi :– Access denies– Don’t have permission

• Không tìm thấy file dữ liệu đã lưu

Page 15: Fix incompatible issues of old applictions on Windows 7

Chuyển hướng khi truy xuất file, registry• Trong Windows 7, người dùng bình thường bị giới hạn

truy xuất tới một số tệp, thư mục và registry key bao gồm:– Thư mục Windows, Program Files, thư mục gốc C:\

– HKEY_LOCAL_MACHINE

• Ứng dụng cũ khi chạy trên Windows 7 không ghi vào thư mục hệ thống, registry HKLM -> gây lỗi. Đây là lỗi rất phổ biến.

• Phân biệt giữa ứng dụng UAC và non UAC:– UAC: User Account Control

– Ứng dụng UAC: có file manifest định nghĩa UAC. Được biên dịch bằng Visual Studio 2008

– Ứng dụng non UAC không có file manifest, được biên dịch Visual Studio phiên bản cũ…

Page 16: Fix incompatible issues of old applictions on Windows 7

Cách xử lý đơn giản nhất

• Nhấp chuột phải chọn “Run as administrator”

• Chọn chế độ chạy tương thíchXP Mode

Page 17: Fix incompatible issues of old applictions on Windows 7

Giải quyết bằng nhúng file manifest• Nhúng file manifest

<security><requestedPrivileges>

<requestedExecutionLevel level="requireAdministrator“ /> </requestedPrivileges> </security>

• Các mức request– AsInvoker: bằng với quyền người đang máy tính– HighestAvailable: quyền cao nhất có thể, khi

normal user được gán thêm một số quyền– RequireAdministrators: chạy với quyền

AdministratorVideo: Manifest_RequireAdministrator.wmv

Page 18: Fix incompatible issues of old applictions on Windows 7

User Account Control : Solutions

• Thiết kế ứng dụng với mô hình Admin Broker Model.

Application.exe (File chạy)- Chạy với quyền của Standard User- Thực hiện nghiệp vụ của ứng dụng

Application-Setting.exe (File chạy)- Nhúng file manifest- Luôn chạy với quyền Administrator- Thực hiện thay đổi cấu hình, thông tin toàn cục.- Start/ Stop Service- Attach DB-Ghi thông tin cấu hình máy ( Program File, Registry )-…

Page 19: Fix incompatible issues of old applictions on Windows 7

Data Redirection - Ảo hóa

Microsoft Confidential

Page 20: Fix incompatible issues of old applictions on Windows 7

Data Rediretion : vấn đề

• Không tìm thấy file trong thư mục đã ghi.• Không tìm thấy khóa Registry theo path đã

ghi.• Ứng dụng đã cập nhập nhưng vẫn sử dụng

các file cũ.• Ứng dụng đã bị gỡ bỏ nhưng vẫn tồn tại file

rác trong khu vực ảo hóa.• Lỗi khi ghi, sửa, xóa file, thư mục.• Lỗi khi ghi, sửa, xóa key trong HKLM.

Page 21: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Page 22: Fix incompatible issues of old applictions on Windows 7

Ảo hóa khi truy xuất file & registry• Phần mềm non-UAC truy xuất tệp và registry bị giới

hạn sẽ bị đổi hướng

– Truy xuất file chuyển hướng (ảo hóa) vào Virual Store (C:\Users\Bob\AppData\Local \VirtualStore)

– Truy xuất registry ảo hóa vào HKCU\Classes\VirtualStore

– File, registry sẽ được cá nhân hóa cho từng normal user chứ không dùng chung như trước.

– Dữ liệu sẽ được lưu vào chỗ khác

• Services ngoại lệ với UAC và không bị ảo hóa

• Chạy ứng dụng bằng Administrator thì sẽ không bị ảo hóa

• Ảo hóa là giải pháp trong Windows 7 32 bit sẽ không được hỗ trợ trong Windows 7 64 bit và thế hệ kế tiếp.

Page 23: Fix incompatible issues of old applictions on Windows 7

Trường hợp không ảo hóa• Ứng dụng chạy trên Windows 7 64 bit.

• Ứng dụng có UAC khi truy xuất vào thư mục , registry hệ thống sẽ bị chặn

– Ảo hóa truy xuất không được kích hoạt, thao tác với dữ liệu sẽ được kiểm tra quyền theo NFTS hoặc registry ACLs áp dụng cho từng vùng tài nguyên

– Mặc định các ứng dụng được biên dịch bằng Visual Studio 2008 sẽ đi kèm với file manifest

Page 24: Fix incompatible issues of old applictions on Windows 7

Ảo hóa truy xuất file với normal user

Luafv.sys

Ntfs.sys

Ứng dụng cũ

User mode

Kernel mode

\Windows\App.ini

\Users\<user>\AppData\Local\VirtualStore\Windows\App.ini

Ứng dụng cho Windows 7

\Windows\App.ini

Access Denied

Page 25: Fix incompatible issues of old applictions on Windows 7

Ứng dụng cũ

Ứng dụng cho Windows 7

Ảo hóa truy xuất registry với normal user

Ntoskrnl.exe

User mode

Kernel mode

HKLM\Software\App

HKCU\Software\Classes\VirtualStore\Machine\Software\App

Registry

Access Denied

Page 26: Fix incompatible issues of old applictions on Windows 7

Xử lý lỗi ảo hóa

• Nhúng file manifest với requestedExecution- Level phù hợp

• Giảm bớt hạn chế quyền truy cập trong Accces Control List (ACL)

• Ghi dữ liệu theo user hoặc và các khu vực chung.

• Sử dụng Standard User Analyzer hoặc Compatibility Administrator để sửa.

• Demo…

Page 27: Fix incompatible issues of old applictions on Windows 7

DPI: dot per inch

Microsoft Confidential

Page 28: Fix incompatible issues of old applictions on Windows 7

High DPI Problem: giao diện xô lệch ở mức DPI cao

Clipped text

Layout issues and image size issues

Pixilated bitmaps

WinForms issues

Blurry UI Mismatched font sizes

Page 29: Fix incompatible issues of old applictions on Windows 7

Hight DPI : Problem

• Các control phóng to thu nhỏ không đồng đều.

• Sử dụng nhiều font chữ khác nhau không đồng nhất

• Sử dụng đồ họa raster• Ảo hóa DPI trong Window 7 làm UI bị mờ.

Page 30: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Don’t Panic !

Page 31: Fix incompatible issues of old applictions on Windows 7

Chỉnh DPI qua Display Control Panel

• DPI: Dot Per Inch• Windows 7 co dãn DPI theo tỷ lệ phần trăm

– 100% = 96 DPI– 125% = 120 DPI– 150% = 144 DPI

• DPI càng cao, HĐH sẽ dùng nhiều dot để vẽ giao diện control hơn. Một số control có kích thước dot cố định không tự động co dãn sẽ làm giao diện bị xô lệch.

Page 32: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Giao diện khi đổi thuộc tính AutoScaleMode từ DPI sang None

DPI Scalling None DPI Scalling, chữ không tương đương với form nữa

Page 33: Fix incompatible issues of old applictions on Windows 7

Hight DPI : Solution

• Nhúng file manifest để ứng dụng nhận biết DPI

• Sử dụng font chữ TrueType hoặc OpenType ( Font có phần mở rộng là ttf và otf )

<asmv3:application> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>true</dpiAware> </asmv3:windowsSettings> </asmv3:application>

Page 34: Fix incompatible issues of old applictions on Windows 7

Xử lý lỗi giao diên xô lệch khi thay đổi DPI• Với ứng dụng .NET– Đặt thuộc tính “AutoScaleMode” = “Font” or

“DPI”

• Native Win32 applications– Be DPI Aware – include DPI Aware manifest– Scale all UI text, points and sizes using the DPI

values returned by the GetDeviceCaps API

Page 35: Fix incompatible issues of old applictions on Windows 7

Hight DPI : best practice

• Độ phân giải hiệu quả là độ phân giải tối thiểu mà ứng dụng cần để có thể hiển thị đầy đủ

• Tính toán độ phân giải hiệu quả

• Ví dụ : Màn hình hiển thị 1200x900 với DPI = 146 thì độ phân giải hiệu quả là 800x600.

• Tận dụng đồ họa vector thay cho raster.

Độ phân giải hiệu quả = Độ phân giải vật lý / (DPI/96).

Page 36: Fix incompatible issues of old applictions on Windows 7

Nhận diện sai trình cài đặt

Microsoft Confidential

Page 37: Fix incompatible issues of old applictions on Windows 7

Nhận diện sai trình cài đặt• Trình cài đặt trước Vista dùng quyền administrator

– Ghi, sửa vào thư mục Program File, registry HKEY_LOCAL_MACHINE

• Windows 7 chạy chương trình dùng quyền của normal user– Khiến trình cài đặt thất bại ở một số tác vụ

– Windows 7 nhận biết trình cài đặt để nâng cấp quyền hạn cho phù hợp.

• Giải pháp: dùng thuật toán phỏng đoán nếu một file chạy là trình cài đặt. Tuy nhiên phỏng đoán có xác suất bị sai. Chỉ áp dụng với file chạy 32 bit không có file Manifest đi kèm.

• Nếu tên file có chứa “install”, “setup”, “update” xác suất cao sẽ là trình cài đặt. Ngoại lệ, ví dụ Stock_Update.exe không phải là trình cài đặt. Hoặc CaiDatKeToan.exe lại là trình cài đặt.

Page 38: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Don’t Panic !

Page 39: Fix incompatible issues of old applictions on Windows 7

Giải pháp• Thêm file manifest mô tả thông tin UAC:

nhúng hoặc đi kèm theo trình cài đặt

• Sử dụng file manifest đi kèm dễ hơn vì không cần biên dịch lại trình cài đặt– Named MyApp.Exe.manifest

• <requestedExecutionLevel level=“?”>– asInvoker– quyền bằng trình kích hoạt, không đủ

để cài đặt– requireAdministrator– yêu cầu nâng quyền lên

Administrator để cài đặt

Page 40: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Session 0 IsolationSe

Session

Window station

(WinSta0)

Desktop (default desktop)

User applicatio

n or service

Page 41: Fix incompatible issues of old applictions on Windows 7

Thay đổi trong kiến trúc session của HĐH• Trong Windows XP, ứng dụng giao diện và service

cùng chạy trong session 0.

• Từ Vista trở đi, session 0 dành riêng để chạy services.

• Ứng dụng giao diện người dùng sẽ chạy trên session 1, 2, 3…

• Vấn đề phát sinh với kiến trúc mới:

– Lập trình với API cũ, Windows message không vượt qua ranh giới của session.

– Kernel objects được nằm riêng trong từng session.

– Service không thể tương tác, hiển thị UI trên desktop.

• Lỗi này ít xảy ra với ứng dụng phần mềm ở Việt nam.

Page 42: Fix incompatible issues of old applictions on Windows 7

Hướng xử lý• Gửi message (thông điệp) từ service đến ứng

dụng GUI bằng hàm WTSSendMessage. Thực chất hàm WTSSendMessage dùng để hiển thị dialog box từ một remote session (phiên điều khiển máy tính từ xa)

• Hoặc service chạy hàm CreateProcessAsUser tạo ra một process để chạy ứng dụng GUI

Page 43: Fix incompatible issues of old applictions on Windows 7

User Interface Privilege Isolation- vênh quyền giữa 2 tiến trình

• Từ Vista, Microsoft đưa ra integrity level (mức hòa đồng)

• Mặc đinh một tiến trình không thể gửi thông điệp đến tiến trình khác có mức hòa đồng cao hơn.

• Cơ chế này gọi là User Interface Privilege Isolation (UIPI) ~ phân biệt đặc quyền giao diện.

• Thường xảy ra với những chương trình viết bằng C++.

Page 44: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Unikey và Internet Explorer

• Unikey phiên bản trước đây không thể gõ tiếng Việt vào IE 7, 8. Khi hạ mức UAC thì lại gõ được.

• Tình trạng của Unikey phiên bản cũ, gõ tiếng Việt vào IE.– IE chạy ở low integrity level

– Unikey dùng một shared resource nên có integrity level là medium

– Khi Unikey hook vào IE nhận thông điệp bàn phím do cơ chế UIPI, IE không thể gửi thông điệp đến cho cho Unikey. Kết quả Unikey không chuyển đổi dấu cho các ký tự.

• Giải pháp của anh Phan Kim Long:– Hạ mức integrity level của shared resource trong

Unikey xuống mức low bằng với mức của IE. IE sẽ gửi được thông điệp đến Unikey.

Page 45: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

User Interface Privilege Isolation

IE

Unikey

IEUnikey

Page 46: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Version checking -Kiểm tra sai phiên bản HĐH• Windows 7 có version number là Windows NT

6.1 chứ không phải là 7.x.

• Lỗi xảy ra khi phần mềm kiểm tra version của HĐH dùng so sánh = hoặc !=.

• Cách đúng là phải so sánh <= và >=

• Không nhất thiết kiểm tra version, với hàm đặc biệt cóthể đặt lời gọi trong try catch

Page 47: Fix incompatible issues of old applictions on Windows 7

Version Checker : Solutions• Không nên

if (Environment.OSVersion.Version != new Version(5, 1)){MessageBox.Show("Windows XP required.", "Incompatible Operating System",MessageBoxButtons.OK,

MessageBoxIcon.Error);return;}

if (Environment.OSVersion.Version < new Version(5, 1)){MessageBox.Show("Windows XP or later required.", "Incompatible Operating System",MessageBoxButtons.OK,

MessageBoxIcon.Warning);}

• Nên

Page 48: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Kiểm tra tương thích sản phẩmphần mềm trênWindows 7

Page 49: Fix incompatible issues of old applictions on Windows 7

Microsoft Confidential

Microsoft Application Compatibility Toolkit• Chạy thử và phát hiện những lỗi không

tương thích trong phần mềm.

Page 50: Fix incompatible issues of old applictions on Windows 7

Application Compatibility Toolkit

• ACT là gì ?– Bộ công cụ hỗ trợ tương thích ứng dụng

• ACT dùng để làm gì ? ( Tại sao cần ?)– Kiểm tra độ tương thích ứng dụng– Cung cấp thông tin về vấn đề không tương thích– Sửa và làm giảm nhẹ vấn đề tương thích

• Tôi có thể lấy về ở đâu ?– Tải xuống miễn phí tại http://tiny.cc/JZzeC(http://www.microsoft.com/downloads/details.aspx?familyid=24da89e9-

b581-47b0-b45e-492dd6da2971&displaylang=en)

Page 51: Fix incompatible issues of old applictions on Windows 7

Các công cụ chính trong ACT

• Internet Explorer Compatibity Test Tool: kiểm tra tính bảo mật, tương thích của ứng dụng web trên trình duyệt IE7, IE8.

• Standard User Analyzer: chạy thử ứng dụng, bắt những lệnh gọi API không tương thích với Windows 7, tạo mảnh vá lỗi không tương thích – shim.

• Compatibility Administrator: sửa đổi chi tiết từng lỗi không tương thích và tạo ra mảnh vá shim.

• Application Compatibility Manager: tạo package để theo dõi lỗi không tương thích sau đó gửi lên server.

Page 52: Fix incompatible issues of old applictions on Windows 7

Application Compatibility Toolkit

• Quy trình làm việc

Video: ApplicationManager.wmv

Page 53: Fix incompatible issues of old applictions on Windows 7

Application Compatibility Toolkit

Page 54: Fix incompatible issues of old applictions on Windows 7

Application Compatibility Toolkit

• Thành phần chính của ACT– Application Compatibility Manager– Compatibility Administrator– Standard User Analyzer– IE Compatibility Test Tool– Setup Analysis Tool

Page 55: Fix incompatible issues of old applictions on Windows 7

Application Compatibility Toolkit

• Data Collector– Tạo gói cài đặt triển khai được trên nhiều máy– Thu thập dữ liệu về lỗi không tương thích ứng dụng– Ghi ra file log – Service Upload dữ liệu vào DB MS SQL SERVER 2005

Page 56: Fix incompatible issues of old applictions on Windows 7

Application Compatibility Toolkit

• Data Analyzer– Thông báo các lỗi không tương thích– Hỗ trợ hiển thị report theo mong muốn– Đồng bộ hóa dữ liệu với cộng đồng để tìm giải pháp khắc phục

Page 57: Fix incompatible issues of old applictions on Windows 7

Application Compatibility Toolkit

• Test & Mitigate– Test tool :

• SUA, • IE Compatibility Test Tool, • Setup Analyzer Tool

– Mitigatation Tool : • Compatibility Administrator

Page 58: Fix incompatible issues of old applictions on Windows 7

Shim – Miếng vá

• Shim sử dụng các kỹ thuật được tích hợp sẵn như ảo hóa, sửa đổi ACL, …

Page 59: Fix incompatible issues of old applictions on Windows 7

Phát triển ứng dụng tương thích

• Xác định loại ứng dụng– Standard User only– Administrator only– Mix

• Xây dựng theo mô hình Admin Broker• Lưu trữ thông tin theo user ( per user )• Hiển thị theo chế độ DPI• Tách biệt trình cập nhập (nếu có)• Sử dụng trình cài đặt hỗ trợ Window 7