String-Pool 驗證
Windows Installer 會將所有資料庫字串儲存在單一共用字串集區中,以減少資料庫的大小並改善效能。 驗證字串集區的唯一方法,就是使用 Windows Installer SDK 中找到的 MsiInfo 工具。
字串集區驗證是由兩個主要檢查所組成:
DBCS 字串測試
DBCS 字串測試會掃描資料庫中的每一個字串是否有兩個準則:針對標示中性代碼頁的套件,如果有任何字元是擴充字元(大於 127),則會標示字元串,並顯示一則訊息,指出資料庫的代碼頁無效,因為這些字元需要在所有系統上一致地轉譯特定的代碼頁。
如果資料庫有代碼頁,則會掃描每個字串是否有無效的 DBCS 指標。 如果未正確標記非中性字串,字元將無法正確轉譯。 (這通常是因為使用資料庫中已有非中性字串的_ForceCodepage數據表,強制代碼頁成為特定值所造成。請注意,這項檢查會要求在系統上安裝資料庫的代碼頁。
如果代碼頁發生問題,使用者可能會使用 _ForceCodepage 數據表來修正錯誤,以強制資料庫的代碼頁設為適當的值。 如需詳細資訊,請參閱 代碼頁處理。
參考計數驗證
若要確認所有字串的參考計數,系統會掃描每個數據表是否有字串值、保留每個相異字串的計數,並將結果與資料庫字串集區中儲存的參考計數進行比較。
如果發生字串參考計數問題,用戶應該使用 MsiDatabaseExport立即匯出資料庫的每個數據表、建立新的資料庫,並使用 MsiDatabaseImport將數據表匯入新資料庫。 新的資料庫接著具有與舊資料庫相同的內容,但字串參考計數正確。 從具有損毀字串集區的資料庫新增或刪除數據可能會增加資料庫損毀和數據遺失,因此快速採取這些步驟對於防止進一步的數據遺失很重要。
重建資料庫時,請記得在新的資料庫中內嵌任何必要的記憶體和數據流(請參閱 _Streams 數據表 和 _Storages 數據表),並注意代碼頁問題。 也請記得設定每個必要的 摘要資訊數據流 屬性。