2014年7月3日 星期四

解決程式相容性問題-Program Compatibility Assistant

有時候結束程式會跳出一個Program Compatibility Assistant的視窗,雖然沒有任何功能性的問題但對Usability來說畢竟是有瑕疵。這問題發生的原因是因為在註冊區並沒有紀錄這個程式的安裝路徑,解決這個問題的方法有兩個,

  • 第一個可以透過修改app.manifest來達到,在compatibility的tag當中,加入這段{35138b9a-5d96-4fbd-8e2d-a2440225f93a}是windows 7的 ID,在manifest中加入此段的code可以避免PCA的視窗彈出。

clip_image001

  • 另一種比較苦工的做法, 是每一次在執行結束前後在以下註冊區(HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted)加入自己的程式,如果使用script的寫法就是:
    • "`"reg add \`"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted`" /v `"%%S\your program location`" /t REG_DWORD /d 0x1 /f`"

但是這種寫法不好除錯也很難維護,使用manifest的管理是比較正確的做法

設計一個自動安裝程式(Installer)並且使用自解檔(self-extracting executable)的元件就會很容易發生上述的問題, 但是自解檔是透過外部ZIP元件而產生(舉例來說 .NET ZIP或ZipForge),這時候就可以使用 mt.exe 這個Tool來匯入manifest 到ZIP元件或是exe當中,mt的用法參考,以往必須要在Viual Studio裡面的build script當中寫入使用mt.exe 匯入到manifest,但是之後只需要在專案當中掛入mainifest就足夠了

沒有留言:

張貼留言