Ett databas- och korrigeringsexempel
Ett program kan använda funktionen MsiOpenDatabase för att öppna en ny eller befintlig installationsdatabas (.msi fil) eller korrigeringspaket (.msp-fil.) Programmet kontrollerar returvärdet för MsiOpenDatabase innan du använder databashandtaget.
I följande exempel används variablerna PMSIHANDLE typ som definierats i msi.h. Vi rekommenderar att du använder PMSIHANDLE- eftersom installationsprogrammet stänger PMSIHANDLE objekt när de hamnar utanför omfånget, medan programmet måste stänga MSIHANDLE- objekt genom att anropa MsiCloseHandle. Mer information finns i Använda PMSIHANDLE i stället för AVSNITTET HANTERA i bästa praxis för Windows Installer.
I följande exempel öppnas en databas, sample.msi, för endast läsning. MsiOpenDatabase lyckas endast om sample.msi finns i katalogen c:\test. När det har lyckats kan den returnerade databasreferensen användas för att fråga efter data i installationspaketet med hjälp av MsiDatabaseOpenView och MsiGetSummaryInformation.
PMSIHANDLE hDbReadOnly = 0;
UINT uiStatus1 = MsiOpenDatabase(TEXT("c:\\test\\sample.msi"), MSIDBOPEN_READONLY, &hDbReadOnly);
if (ERROR_SUCCESS != uiStatus1)
{
// process error
return uiStatus1;
}
I följande exempel öppnas databasen för läsning och skrivning. Om programmet anropar MsiDatabaseCommitsparas alla ändringar som görs i databasen. Om programmet inte anropar MsiDatabaseCommitgörs inga ändringar i databasen.
PMSIHANDLE hDbTransact = 0;
UINT uiStatus2 = MsiOpenDatabase(TEXT("c:\\test\\example.msi"), MSIDBOPEN_TRANSACT, &hDbTransact);
if (ERROR_SUCCESS != uiStatus2)
{
// process error
return uiStatus2;
}
Följande exempel tar en befintlig databas, text.msi, och skapar en ny databas, newtest.msi. Ändringar som görs kan sparas i den nya databasen genom att anropa MsiDatabaseCommit. Den befintliga databasen som anges i parametern szDatabasePath är oförändrad.
PMSIHANDLE hDbOutput = 0;
UINT uiStatus3 = MsiOpenDatabase(TEXT("c:\\test\\test.msi"), TEXT("c:\\test\\newtest.msi"), &hDbOutput);
if (ERROR_SUCCESS != uiStatus3)
{
// process error
return uiStatus3;
}
I följande exempel öppnas ett Windows Installer-korrigeringspaket (.msp-fil) för endast läsning. Det returnerade korrigeringshandtaget kan användas för att fastställa skåp och transformera underlagringar som ingår i korrigeringspaketet genom frågor i tabellerna _Streams och _Storages.
Windows Installer 2.0: Stöds inte. Från och med Windows Installer 3.0 kan programmet fråga tabellen MsiPatchSequence finns i ett korrigeringspaket som använder den nya korrigeringssekvensinformationen.
PMSIHANDLE hDbPatch = 0;
LPCTSTR szPersistMode = MSIDBOPEN_READONLY + MSIDBOPEN_PATCHFILE;
UINT uiStatus4 = MsiOpenDatabase(TEXT("c:\\test\\sample.msp"), szPersistMode, &hDbPatch);
if (ERROR_SUCCESS != uiStatus4)
{
// process error
return uiStatus4;
}