Příklad databáze a opravy
Aplikace může pomocí funkce MsiOpenDatabase otevřít novou nebo existující instalační databázi (soubor.msi) nebo balíček oprav (soubor .msp.) Aplikace před použitím popisovače databáze zkontroluje návratovou hodnotu MsiOpenDatabase.
Následující příklady používají proměnné typu PMSIHANDLE definované v msi.h. Doporučuje se použít typ PMSIHANDLE, protože instalační program zavře PMSIHANDLE objekty při jejich přechodu mimo rozsah, zatímco aplikace musí zavřít MSIHANDLE objekty voláním MsiCloseHandle. Další informace naleznete v tématu Použití PMSIHANDLE místo popisovačů v osvědčených postupech instalační služby systému Windows.
Následující příklad otevře databázi, sample.msi, pouze pro čtení. MsiOpenDatabase úspěšně proběhne pouze v případě, že sample.msi existuje v adresáři c:\test. Po úspěchu lze vrácený popisovač databáze použít k dotazování dat v instalačním balíčku pomocí MsiDatabaseOpenView a MsiGetSummaryInformation.
PMSIHANDLE hDbReadOnly = 0;
UINT uiStatus1 = MsiOpenDatabase(TEXT("c:\\test\\sample.msi"), MSIDBOPEN_READONLY, &hDbReadOnly);
if (ERROR_SUCCESS != uiStatus1)
{
// process error
return uiStatus1;
}
Následující příklad otevře databázi pro čtení a zápis. Pokud aplikace volá MsiDatabaseCommit, uloží se všechny změny provedené v databázi. Pokud aplikace nevolá MsiDatabaseCommit, nebudou provedeny žádné změny databáze.
PMSIHANDLE hDbTransact = 0;
UINT uiStatus2 = MsiOpenDatabase(TEXT("c:\\test\\example.msi"), MSIDBOPEN_TRANSACT, &hDbTransact);
if (ERROR_SUCCESS != uiStatus2)
{
// process error
return uiStatus2;
}
Následující příklad přebírá existující databázi, text.msia vytvoří novou databázi newtest.msi. Všechny změny provedené v nové databázi lze uložit voláním MsiDatabaseCommit. Existující databáze zadaná v parametru szDatabasePath se nezmění.
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;
}
Následující příklad otevře balíček oprav instalační služby systému Windows (soubor .msp) jen pro čtení. Vrácený popisovač opravy lze použít k určení podstoráží skříní a transformace zahrnutých v balíčku oprav pomocí dotazů na _Streams a _Storages tabulek.
Instalační služba systému Windows 2.0: Nepodporuje se. Počínaje instalační službou systému Windows 3.0 může aplikace dotazovat tabulku MsiPatchSequence v balíčku oprav, který používá nové informace o sekvencování oprav.
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;
}