Dela via


String-Pool validering

Windows Installer lagrar alla databassträngar i en enda delad strängpool för att minska databasens storlek och förbättra prestandan. Det enda sättet att verifiera strängpoolen är att använda verktyget MsiInfo som finns i Windows Installer SDK.

Verifiering av strängpool består av två huvudkontroller:

DBCS-strängtester

DBCS-strängtesterna söker igenom varje sträng i databasen efter två villkor: För paket med en neutral kodsida markerad, om något tecken är ett utökat tecken (större än 127), flaggas strängen och ett meddelande visas som säger att databasens kodsida är ogiltig eftersom dessa tecken kräver att en specifik kodsida återges konsekvent i alla system.

Om databasen har en kodsida genomsöks varje sträng efter en ogiltig DBCS-indikator. Om en icke-neutral sträng har markerats felaktigt återges inte tecknen korrekt. (Detta orsakas oftast av att kodsidan tvingas till ett visst värde med hjälp av tabellen _ForceCodepage med icke-neutrala strängar som redan finns i databasen.) Observera att den här kontrollen kräver att kodsidan för databasen installeras på systemet.

Om det finns ett problem med kodsidan kan användaren åtgärda felet med hjälp av tabellen _ForceCodepage för att tvinga databasens kodsida till rätt värde. Mer information finns i Code Page Handling.

Verifiering av referensantal

För att verifiera referensantalet för alla strängar genomsöks varje tabell efter strängvärden, antalet distinkta strängar sparas och resultatet jämförs med det lagrade referensantalet i databassträngspoolen.

Om det finns ett problem med antalet strängreferenser bör användaren omedelbart exportera varje tabell i databasen med hjälp av MsiDatabaseExport, skapa en ny databas och importera tabellerna till den nya databasen med hjälp av MsiDatabaseImport. Den nya databasen har sedan samma innehåll som den gamla databasen, men antalet strängreferenser är korrekta. Att lägga till eller ta bort data från en databas med en skadad strängpool kan öka skada på databasen och dataförlust, så det är viktigt att vidta dessa åtgärder snabbt för att förhindra ytterligare dataförlust.

När du återskapar databaser bör du komma ihåg att bädda in alla nödvändiga lagrings- och strömmar i den nya databasen (se _Streams Table och _Storages Table) och var medveten om problem med kodsidan. Kom också ihåg att ange var och en av de nödvändiga sammanfattningsinformationsströmmen egenskaper.