Windows インストーラーは、データベースのサイズを小さくし、パフォーマンスを向上させるために、すべてのデータベース文字列を 1 つの共有文字列プールに格納します。 文字列プールを検証する唯一の方法は、Windows インストーラー SDK で見つかった MsiInfo ツールを使用することです。
文字列プールの検証は、次の 2 つの主要なチェックで構成されます。
DBCS 文字列テスト
DBCS 文字列テストでは、データベース内の各文字列をスキャンして 2 つの条件を調べることができます。ニュートラル コード ページがマークされているパッケージの場合、いずれかの文字が拡張文字 (127 より大きい) の場合、文字列にフラグが設定され、データベースのコード ページが無効であることを示すメッセージが表示されます。これらの文字はすべてのシステムで特定のコード ページを一貫してレンダリングする必要があるためです。
データベースにコード・ページがある場合、各ストリングは無効な DBCS 標識をスキャンします。 ニュートラルでない文字列が正しくマークされていない場合、文字は正しくレンダリングされません。 (これは最も一般的に、データベース内にニュートラルでない文字列が既に含まれる_ForceCodepage テーブルを使用して、コード ページを特定の値に強制することによって発生します)。このチェックでは、データベースのコード ページをシステムにインストールする必要があることに注意してください。
コード ページの問題が発生した場合、ユーザーは _ForceCodepage テーブルを使用して、データベースのコード ページを適切な値に強制することでエラーを修正できます。 詳細については、「コード ページ処理」を参照してください。
参照カウントの検証
すべての文字列の参照カウントを確認するために、すべてのテーブルで文字列値がスキャンされ、各個別の文字列のカウントが保持され、結果がデータベース文字列プールに格納されている参照カウントと比較されます。
文字列参照カウントの問題がある場合、ユーザーは、MsiDatabaseExportを使用してデータベースの各テーブルをすぐにエクスポートし、新しいデータベースを作成し、MsiDatabaseImportを使用して新しいデータベースにテーブルをインポートする必要があります。 その後、新しいデータベースの内容は古いデータベースと同じですが、文字列参照数は正しいです。 文字列プールが破損しているデータベースにデータを追加または削除すると、データベースの破損やデータの損失が増加する可能性があるため、これらの手順を迅速に実行することは、データ損失を防ぐために重要です。
データベースを再構築する場合は、必要なストレージとストリームを新しいデータベースに埋め込み (_Streams Table と table _Storages を参照) し、コード ページの問題に注意してください。 また、必要な 概要情報ストリーム プロパティも忘れずに設定してください。