Megosztás a következőn keresztül:


Példa adatbázisra és javításra

Az alkalmazások az MsiOpenDatabase függvénnyel nyithatnak meg egy új vagy meglévő telepítési adatbázist (.msi fájlt) vagy javításcsomagot (.msp fájlt).) Az alkalmazás az adatbázis-leíró használata előtt ellenőrzi MsiOpenDatabase visszatérési értékét.

Az alábbi példák az msi.h-ban definiált PMSIHANDLE típusú változókat használják. Javasoljuk, hogy a PMSIHANDLE típust használja, mert a telepítő bezárja PMSIHANDLE objektumokat, miközben az alkalmazásnak be kell zárnia MSIHANDLE objektumokat MsiCloseHandlemeghívásával. További információ: A Windows Installer ajánlott eljárásaiHANDLE helyett a PMSIHANDLE használata.

Az alábbi példa megnyit egy adatbázist, sample.msi, amely csak olvasásra használható. MsiOpenDatabase csak akkor sikerül, ha sample.msi létezik a c:\test könyvtárban. Sikeresség esetén a visszaadott adatbázis-leíróval lekérdezhetők a telepítési csomag adatai MsiDatabaseOpenView és MsiGetSummaryInformation.

PMSIHANDLE hDbReadOnly = 0;
UINT uiStatus1 = MsiOpenDatabase(TEXT("c:\\test\\sample.msi"), MSIDBOPEN_READONLY, &hDbReadOnly);
if (ERROR_SUCCESS != uiStatus1)
{
    // process error
    return uiStatus1;
}

Az alábbi példa megnyitja az adatbázist olvasáshoz és íráshoz. Ha az alkalmazás meghívja MsiDatabaseCommit, a rendszer menti az adatbázison végrehajtott összes módosítást. Ha az alkalmazás nem hívja meg MsiDatabaseCommit, a rendszer nem módosítja az adatbázist.

PMSIHANDLE hDbTransact = 0;
UINT uiStatus2 = MsiOpenDatabase(TEXT("c:\\test\\example.msi"), MSIDBOPEN_TRANSACT, &hDbTransact);
if (ERROR_SUCCESS != uiStatus2)
{
    // process error
    return uiStatus2;
}

Az alábbi példa egy meglévő adatbázist text.msi, és létrehoz egy új adatbázist, newtest.msi. Az új adatbázisban végrehajtott módosítások az MsiDatabaseCommit meghívásával menthetők az új adatbázisban. A szDatabasePath paraméter megadott meglévő adatbázis nem változik.

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;
}

Az alábbi példa egy Windows Installer-javításcsomagot (.msp fájlt) nyit meg, amely csak olvasásra használható. A visszaadott javítópont segítségével a _Streams és _Storages táblák lekérdezései alapján meghatározhatja a javításcsomagban található szekrényeket és átalakíthatja az alkészleteket.

Windows Installer 2.0: Nem támogatott. A Windows Installer 3.0-tól kezdve az alkalmazás lekérdezheti a MsiPatchSequence táblát, egy javításcsomagban, amely az új javítások szekvenálási adatait használja.

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;
}