TechEd 2007今天有一堂關於應用桯式Vista相容性的課程,對於有在寫Windows Form的人來說,這一天遲早會來。講師聖哥已經提供了完整的投影片(程式範例不久後會提供),要深入研究的請到此下載。只想懂個皮毛又不怕被我誤導的,可以參考以下我整理對.NET開發者較有關的心得摘要:

  1. Vista強化了系統相關檔案、資料夾、Registry的保護,只有Windows Update可以更動,應用程式最好避開,要儲放資料或設定,可以考慮%userpfile%下的資料夾及HKCU Registry Key。
  2. 在Vista裡,User個人資料已不是放在X:\Documents And Settings\UserName目錄下了,請使用環境變數的方式取得路徑,不要Hard-coding寫死。
  3. 以前Windows Service程式可以丟訊息到Console端的桌面上,在Vista中,User與Service不會共享同一個Session。如果Service要Popup一個訊息,User會被提示有個來自Session 0的訊息,若要檢視,會先切至黑色背景的特殊桌面,稍後才切換回來。要避免這個問題,可使用Vista另外提供與User Session溝通用的API-WTSSendMessage(), CreateProcessAsUser()。
  4. 應用程式在檢查OS版本請不要限定某個特殊版號,而應做成大於某個版本以上的就OK,例如: 限定XP以上,則2003、Vista也應適用。(XP/2003/Vista可指定用某版本OS相容模式執行程式,解決部分問題)
  5. Vista的UI顯示改為在背景畫好後才顯示出來(沒有OnPaint事件了),減少畫面快速變化時不必要的閃爍,但因此部分如Tooltip、Popup效果會出現邊緣有黑框的狀況。另外,在Vista中,中文字可以不等寬,可能有顯示上的差異。
  6. 高解析度下,Vista會強迫將Icon放大,避免畫面元素難以閱讀,若因此造成與原設計的比例不符,可用SetProcessDPIAware()防止。
  7. 若使用到Access DB File,須為Access 2003 SP1 +,且MS不提供Support,建議用SQL Express SP2。
  8. IIS7變了很多,但我們應該不會用Vista當Web Server,所以這問題可以等Windows 2008再來頭痛。
  9. User Access Control, UAC:
    即使是管理者,平常也是用一般使用者身份執行程式,必要時才升級成管理者權限。而Vista提供了所謂的”資料轉向”,當應用程式企圖寫入資料到%SystemDrive%\Program Files, %WinDir%\System32或Registry HTLM\Software時,Vista會另外將資料存在Virtual Store中(Ex: C:\Users\jeffrey\AppData\Local\VirtualStore\Program Files),避免不必要的權限升級。但是這樣資料會被寫入非預期的地方,對其他User而言看不到。要處理此問題的方法有三:
    1) 避免對這些高權限的資料夾進行更新動作
    2) 在Button指定為高權限動作,Button上會出現小盾牌的Icon,則按鈕時會提示升級權限。
    3) 設定appName.exe.manifest,要求以管理者權限執行。(或在應用程式內容頁上也可設定)
  10.  安裝程式升級至MSI 3.1,避免使用自動更新機制(除了ClickOnce之外)
  11. 不要在程式中檢查使用者是否有管理者權限,答案將永遠為False。
  12. 檢測相容性的工具: Application Verifier!
    可以監控特定程式執行過程中發生的錯誤,有助於判別是存取何目錄、何Registry時出了問題。
    PS: 另外它還有一個很有用的功能,可以模擬RAM、CPU極度不足的執行環境。
  13. UAC分析專用工具: Standard User Analyzer
    架構在Application Verifier上,專門用來分析UAC相容問題。
  14. Application Compatibility Toolkit:
    可以透過Shim的方式修正檔案、Registry、INI、Token、Namespace、Process上不相容的問題,但權限、其它元件方面的問題則沒救。Shim原指用來塞住縫隙的小木片,它可以欺騙應用程式,使之察覺不到不相容的問題。不過Shim只有MS可以開發,一般User將不相容問題透過ACT上傳至MS的Issue資料庫,等待MS發了佛心針對它開發Shim。
  15. MS會維護一份不相容清單,當你執行不相容程式時,會跳出警告視窗,並提示你連上網站取得修補程式(有時根本沒有修補程式)。若想眼不見為淨,可以更動%WinDir%\AppPath下的檔案,也可以用sbdinst.exe安裝自訂的不相容警告。


Comments

# by Morris

請問您第 5 點指說沒有 OnPaint 事件.. 但我測試結果該事件仍有作用耶...

# by Jeffrey

(汗顏)這篇是上課的筆記,我還沒有時間精力做深入的探索。剛才檢查了曹老師的PPT,的確有提到: >最上層的視窗不再直接將畫面畫到螢幕上 * 不會有 OnPaint 事件 不過課堂上這部分沒有實際的範例展示,我所知的就僅限寫出來的那兩句。既然你已經有明確的程式實測,不妨在曹老師的討論區提出請教,如果有新的心得,歡迎再到這裡分享給大家,我也會將你苦心搜羅的補充納入本文中,嘉惠天下。^__^

Post a comment