有時候結束程式會跳出一個Program Compatibility Assistant的視窗,雖然沒有任何功能性的問題但對Usability來說畢竟是有瑕疵。這問題發生的原因是因為在註冊區並沒有紀錄這個程式的安裝路徑,解決這個問題的方法有兩個,
- 第一個可以透過修改app.manifest來達到,在compatibility的tag當中,加入這段{35138b9a-5d96-4fbd-8e2d-a2440225f93a}是windows 7的 ID,在manifest中加入此段的code可以避免PCA的視窗彈出。
- 另一種比較苦工的做法, 是每一次在執行結束前後在以下註冊區(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就足夠了
沒有留言:
張貼留言